brython skuplt pypy.js

Du hast eine Idee für ein Projekt?
Antworten
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

unter brython habe ich versucht auf phaser.io zuzugreifen um mal nen kleines spielchen zu basteln. ich war auch schon dabei, einige sprites anzeigen zu lassen. weiter habe ich mich mit brython noch gar nicht richtig beschäftigt. so manche sachen, verstehe ich einfach noch nicht.

kann ich mit brython auf jede javascript zugreifen, die ich einbinde, in der html.index? oder denke ich da ganz falsch? von skulpt habe ich auch flüchtig etwas gelesen, das müßte doch fast das gleiche sein, wie auch brython? pypy.js verstehe ich jetzt mal gar nicht. habe nur mit bekommen, das es recht groß sein soll wenn man es mit in seine html seite mit ein bindet.

die sache ist einfach die ... ich wollte jetzt nicht unbedingt javascript nehmen um ein HTML5 spielchen zu basteln. da wäre mir python im browser echt lieber. stehe jetzt aber vor dem problem, was ich da am besten nehmen sollte? vielleicht habt ihr da ein paar tips.

unter brython fand ich es toll, das ich auf die game-engine phasio.io zugreifen konnte. nun hing ich aber da fest, dem sprite ein click event zu verpassen und habe mich da stunden lang mit aufgehalten und bin immer noch nicht weiter.
jetzt wollte ich, bevor ich noch länger da dran rum fummel, euch fragen ob skulpt oder pypy.js da nicht besser geeinet wären und eben die frage ob ich mit brython auf alle javascript libs zugreifen kann, die ich eben in die html seite mit ein binde.

hat da jemand erfahrung gemacht? ich finde da leider nicht wirklich was drüber im netz.
wäre für jede hilfe dankbar.

oder ist mein ansatz vielleicht ganz falsch.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also ich würde da ja eher JavaScript direkt nehmen oder eine Sprache die semantisch davon nicht so weit weg ist und sich zu JavaScript kompilieren lässt. CoffeeScript beispielsweise.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

vielleicht kann mir jemand besser helfen wenn ich mal den code mit bei lege. also wie gesagt, das sprite wird mir angezeigt und rotiert auch, so wie ich es will. jetzt müßte da ein click-event einbauen, was ich auch versucht habe. aber der listener wird nicht angesprungen.

kann da jemand helfen?

Code: Alles auswählen


<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <script src="https://cdn.jsdelivr.net/npm/phaser@3.22.0/dist/phaser-arcade-physics.min.js"></script>
	<script type="text/javascript" src="js/brython.js"></script>
	<script type="text/javascript" src="js/brython_stdlib.js"></script>
        <style>
            body {
            background-color: grey;
            }
            canvas{
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);               
            }
        </style>

</head>

<body onload="brython()">

<script type="text/python">
from browser import window, document
import javascript, random


Phaser = window.Phaser
class Game(object):
    def __init__(self):
        window.console.log("game-init")
        self.game = window.Phaser.Game.new(
            {
                'type': Phaser.AUTO,
                'width': 250,
                'height': 250,
                'scene': {
                    'preload':self. preload,
                    'create': self.create,
                    'update': self.update
                }
            }
        )


    def preload(self, *agrs):
        this = javascript.this ()
        this.load.image('red', 'res/images/red.png')
        this.load.image('green', 'res/images/green.png')
        this.load.image('yellow', 'res/images/yellow.png')
        
    def create(self, *args):
        this = javascript.this ()
        self.counter=0


        self.field1 = this.add.sprite (50, 50, 'red')

        self.field1.on ('InputDown' ,self.listener, this)
        # self.field1.events.onInputDown.add(destroySprite, this)

        self.field1.inputEnabled = True
        self.field1.input = True
        self.field1.name='My-Sprite 1'
        self.field1.setX=20
        self.field1.rotation=0
        self.field1.setScale (2)

        # window.console.log (self.field1.texture.key)

        # self.field1.visible=False
        # self.field1.scaleX=5

        # self.fields.add (self.field1)
        # window.console.log (dir (self.field1))
        window.console.log (self.field1)
        # window.console.log (self.game.canvas.baseURI)

    def update (self, *args):
        this = javascript.this ()
        self.field1.rotation=self.counter
        self.counter = self.counter + .05

        # window.console.log (self.field1)

    def listener (self, *args):
        this = javascript.this ()
        window.console.log ('hier sollte der click an kommen')

GAME = Game ()

</script>


</body>

</html>


__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn ich dieses JavaScript this gefummele sehe, wird mir gleich wieder schummerig. Und genau da würde ich auch deine Probleme vermuten.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

was ist denn da gefummelt? könnte bischen aufräumen, das stimmt. aber da sind ja auch viele sachen zum debuggen drin gewesen.
kannste denn helfen?
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

__blackjack__ hat geschrieben: Sonntag 17. Mai 2020, 14:40 Also ich würde da ja eher JavaScript direkt nehmen oder eine Sprache die semantisch davon nicht so weit weg ist und sich zu JavaScript kompilieren lässt. CoffeeScript beispielsweise.
mhmmmm, das kenne ich gar nicht. würde aber echt am liebsten unter python bleiben.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gefummelt ist das hier: this = javascript.this () Das ist nicht deine Schuld, aber das zeigt sowohl Schwaechen in JS (wo this ein ewiger Dorn ist), als auch in dem Versuch, die beiden Sprachen und ihre unterschiedliche Semantik miteienander zu verheiraten. Das knirscht halt.

Und ich habe dir versucht zu helfen, indem ich dich auf dieses Thema hingewiesen habe, und die Vermutung geaeussert, dass eine Problemquelle darstellt. Denn das war es schon immer mit JS, wo "this" das angeklickte Element war, und nicht das Objekt, dessen Methode man als callback gesetzt hat.

Wenn du unter Hilfe aber nur verstehst, dass man sich mehrere Stunden in ein Game-Framework und eine Transpiling-Loesung einarbeitet, um ein nicht vollstaendiges Beispiel zum laufen zu bringen - nein, das werde ich nicht machen.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@The Hit-Man: Wo ist denn "InputDown" dokumentiert?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

__blackjack__ hat geschrieben: Montag 18. Mai 2020, 09:52 @The Hit-Man: Wo ist denn "InputDown" dokumentiert?
naja, ich hatte das außer phaser.io doku...
wie etwas hier:
https://labs.phaser.io/edit.html?src=sr ... s&v=3.23.0

aber pointerdown habe ich auch schon probiert ...


@ __deets__
ach, ich bin einfach völlig verwirrt, gerade ...
Antworten