Du bist nicht angemeldet.
Nun, mit der Variante habe ich auch schon geliebäugelt. Werd's mal mit dem bisherigen Wissen probieren.
Aber grade hat erstmal die Spielanleitung Vorrang. Außerdem macht mir grade jenes Scheißspiel mit der geilen Grafik ein paar interessante Angebote;)
Ja... Gerne auch mit "Sin" und "Tan"-Berechnungen (Einfallswinkel und Co )
bye
Ron
Da fällt mir ein: Bin zwar wegen der Spielanleitung nicht mehr zu gekommen. Aber ich werde einfach 2 Bälle machen, die von den Bildschirmrändern zurückprallen und deren Geschwindigkeit sich beim Aufprall ändert.
Dafuer sind Fragen da... also ruhig stellen.
bye
Ron
Ups. Tschuldige, wenn ich Sachen frage, die wohl schonmal erklärt waren.
Irgend ist das wie mit Mathetexten, wenn mir die Gleichungen nicht schlüssig waren, verlor sich selbst normaler Text dann im diffusen.
Wenn ich jetzt Deine ersten Beispiele nochmal anschaue, ist mir da manches klarer, als zu Beginn.
Und manches bracuhe ich wohl auch einfach überdeutlich;)
Field autoA:TAuto
Hier teilen wir dem Kompiler (und Leser) mit, dass die umstehende Klasse eine Eigenschaft "autoA" hat... und diese ist vom Typ "TAuto" (sie koennte auch vom Typ "Int" oder "String" sein). Dadurch hat dann jede Instanz der Klasse die Eigenschaft "autoA" und kann auf die Eigenschaften von TAuto (und den spezifischen Eigenschaften von autoA) zugreifen.
Wir koennten schon dort die Autos erzeugen, also
Field autoA:TAuto = new TAuto(-200, 00)
Manchmal erzeugt dies auch mehr Uebersicht, manchmal aber ist ein zentraler Ort (vorallem, wenn man von einer anderen Klasse "erbt", also "class TMeinTyp extends TAndererTyp") die bessere Loesung. Notwendig ist es, wenn bei den Parametern Variablen genutzt werden (bspweise "jedes Auto ist 10 Pixel weiter rechts als das zuvor").
Warum wird hier nicht gleich die Updaterate eingetragen?
Du meinst, warum ich nicht autoA.Update(x) aufrufe, um der Methode "Update()" von autoA mitzuteilen mit welchem Wert es zu arbeiten hat?
Falls ja:
Man kann alle "Update()"-Methoden so schreiben, dass sie einen "delta"-Parameter erwarten (delta = Zeit seit letztem Update als Bruchteil der Updatefrequenz: 1.0 = eine komplette Zeit zwischen zwei Updates) oder andere Werte. Oder aber man laesst sie - so wie du richtig erkannt hast - "allgemeingefasst" und laesst die Methode selbst Dinge herausfinden.
Bei TVTower bspweise kann man mittels "GetDeltaTimer().GetDelta()" von ueberall den gerade gueltigen Deltawert ermitteln. Ein Vorteil ist es, weil wir nicht immer davon ausgehen koennen, dass wir Methoden veraendern koennen, wenn wir von anderen Klassen vererben. Bei BlitzMax muss die vererbte Klasse den gleichen "Funktionskopf" besitzen wie das Original. Wenn also "Fahrzeug" die Methode "Update(x:int, y:int)" haette, muesste die "Auto extends Fahrzeug"-Klasse auch "Update(x:int, y:int)" haben und duerfte nicht einfach einen neuen Parameter hinzufuegen. Bei Monkey koennte dies dank "Ueberladung" aber funktionieren. Eindeutig macht es dies aber in dem Fall nicht. Ich persoenlich finde die Ueberladung nur bei "Settern" (also Funktionen die Werte setzen) richtig praktisch, da man da bequem fuer Dritte Sachen bereitstellen kann (SetPos(point), SetPos(x,y), SetPos(rect), ...).
-
Falls Du aber meintest, wieso ich dort nicht den Befehl "SetUpdateRate(15)" ausfuehre?
Das jedes mal zu machen, wuerde einen ziemlichen Rattenschwanz mit sich ziehen. Auch wissen wir ja nicht, ob sich da nicht intern ein Zaehler 0 setzt, oder was da noch passiert. Das ist eher ein Befehl um etwas zu Initialisieren, aehnlich einem "StarteGrafikModus()"-Befehl.
@Was meint das Int.
Ich dachte das haette ich erwaehnt. Int steht fuer "Integer".
Int ... Integer, Ganzzahlen (-5, 3, 0 ...)
Float ... Fliesskomma (1.11012, -121.22, 0.0)
Double ... groessere Fliesskommazahlen (13423423432.2342)
Long ... groessere Ganzzahlen
String ... Textzeilen ("abc", "dadgtt r g dfgd~n~n" - letzteres sind zwei "Zeilenumbrueche")
Das sind alles von der Sache her "Klassen" (aber etwas anders umgesetzt, aus Geschwindigkeitsgruenden) die Funktionen haben (strings bspweise "ToInt()" ... ein "5".ToInt() erzeugt einen Integer mit dem Wert 5).
@self
Self sagt (das habe ich auch erklaert), dass die folgende Eigenschaft sich auf die der Instanz bezieht.
Global meineVariable:Int = 5
'ich schreibe immer "T" vor den Typ, auch wenn er hier "Class" heisst
'und man da auch ein "CAuto" drauss machen koennte :p.
'Notwendig ist das nicht.
Class TAuto
Field meineVariable:Int = 10
'Void besagt: es wird nix zurueckgegeben
Method Run:Void()
local meineVariable:Int = 20
Print "meineVariable: " + self.meineVariable
Print "meineVariable: " + meineVariable
Print "meineVariable: " + .meineVariable
End Method
End Class
Function Main()
Local auto:TAuto = New TAuto()
auto.Run()
End Function
@Warum "SetzeFarbe"
Ja wir haben ja die Methode "SetzeFarbe" selbst angelegt ... also selber definiert.
@Aufgabe
Erweitere das Autobeispiel um eine Klasse "TStrasse" - die kann sich ja sogar auch bewegen (wenn wir die Strassenmarkierung "bewegen"). also: graues Rechteck von links nach rechts, eigener "abstandX" fuer den Markierungsstart.
Das dient einfach dazu, dass du ein wenig mit den Klassen in Beruehrung kommst.
bye
Ron
Paar Fragen. Mußt sie nicht ausschweifend beantworten, Stichpunkte reichen sicher, da ich glaube, das Prinzip zu verstehen, aber auch Namen dafür möchte;)
Field autoA:TAuto
Field autoB:TAuto
Was ist der genaue Prozess, der hier abläuft bzw. beschrieben wird?
'erzeuge die Autos
autoA = New TAuto(-200, 200)
autoB = New TAuto
Die vorher im Field benannten Autos werden jetzt erst erzeugt?
Method OnUpdate()
'Autos bewegen
autoA.Update()
autoB.Update()
End Method
Warum wird hier nicht gleich die Updaterate eingetragen?
Weil dies eine Klasse für sich ist, die insgesamt beschreibt, was passieren soll? Die genaue Ausführung sind dann eigenen Klassen?
Class TAuto
'Eigenschaften einer jeden Instanz von TAuto
Field x:Int, y:Int
Field breite:Int = 180
'Geschwindigkeit horizontal/vertikal
Field dx:Int = 3, dy:Int = 0
Field farbeR:Int, farbeG:Int, farbeB:Int
Was meint hier jeweils das Int? Initiiere?
'wenn man "new TAuto(x,y)" aufruft:
Method New(x:Int, y:Int)
Self.x = x
Self.y = y
'setze die farben jeweils zufaellig rot = 100-255, gruen ... blau ...
SetzeFarbe(Rnd(100, 255), Rnd(100, 255), Rnd(100, 255))
End Method
Was meint das Self.?
Warum „setze“? Also deutsch? Hast Du das selber definiert?
Alles in allem verstehe ich das.
Aber ob ich das jetzt umsetzen könnte?
Na, vielleicht denke ich mir mal eine Aufgabe aus.
Oder hast Du eine parat?
Die Befehle sind "Funktionen" von Modulen. Es gibt so Logiksachen wie unsere "if ... then ... else... endif". Dinge wie "Print" sind aber Funktionen die generell zur Verfuegung stehen (also nicht nur innerhalb einer Klasse).
Im naechsten Tutorial geht es dann eh um "LoadImage/DrawImage" und wir nutzen "import" um eine eigene, zweite Datei, zu importieren.
bye
Ron
... aber "lerne erstmal" die Grundzuege mit Monkey/Ted.
Hmm. Halte ich auch für besser;)
Also vorwärts!
Hast Du eigentlich irgendwo eine Tabelle mit den Befehlen verfügbar?
Sonst suche ich mir die selber zusammen, immer so, wie es hier vorwärtsgeht. Ist vielleicht sogar besser wegen der Einprägung.
Hmmm
ronny@RonnyPC ~/Arbeit/Programmieren/MonkeyX77a $ ldd jentos_v1.1_linux
linux-vdso.so.1 => (0x00007fff653fe000)
libQt5WebKitWidgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5 (0x00007f8578597000)
libQt5WebKit.so.5 => /usr/lib/x86_64-linux-gnu/libQt5WebKit.so.5 (0x00007f85762cc000)
libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f8575ac4000)
libQt5Network.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Network.so.5 (0x00007f8575782000)
libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f85751b5000)
libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f8574ba1000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8574984000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8574680000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8574469000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f85740a1000)
libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007f8573e37000)
libQt5PrintSupport.so.5 => /usr/lib/x86_64-linux-gnu/libQt5PrintSupport.so.5 (0x00007f8573be0000)
libQt5Sensors.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Sensors.so.5 (0x00007f85739a7000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f857379f000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8573585000)
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f857337b000)
libXcomposite.so.1 => /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007f8573178000)
libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f8572f22000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f8572cfc000)
libicui18n.so.48 => /usr/lib/x86_64-linux-gnu/libicui18n.so.48 (0x00007f8572934000)
libicuuc.so.48 => /usr/lib/x86_64-linux-gnu/libicuuc.so.48 (0x00007f85725c7000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8572292000)
libxslt.so.1 => /usr/lib/x86_64-linux-gnu/libxslt.so.1 (0x00007f8572055000)
libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f8571cee000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f85719ed000)
libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f857179c000)
libgstreamer-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 (0x00007f8571499000)
libgstapp-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstapp-1.0.so.0 (0x00007f857128d000)
libgstbase-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstbase-1.0.so.0 (0x00007f8571036000)
libgstpbutils-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstpbutils-1.0.so.0 (0x00007f8570e0f000)
libgstvideo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstvideo-1.0.so.0 (0x00007f8570bcd000)
libgstaudio-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0 (0x00007f8570987000)
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f85706d3000)
libQt5Quick.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5 (0x00007f8570178000)
libQt5Qml.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5 (0x00007f856fd3b000)
libQt5Sql.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Sql.so.5 (0x00007f856fafc000)
libQt5Location.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Location.so.5 (0x00007f856f85a000)
libGL.so.1 => /usr/lib/fglrx/libGL.so.1 (0x00007f856f64e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f856f349000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f856f145000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8578801000)
libicudata.so.48 => /usr/lib/x86_64-linux-gnu/libicudata.so.48 (0x00007f856ddd4000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f856dbb6000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f856d993000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f856d754000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f856d54c000)
libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f856d347000)
libgsttag-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgsttag-1.0.so.0 (0x00007f856d10f000)
libQt5V8.so.5 => /usr/lib/x86_64-linux-gnu/libQt5V8.so.5 (0x00007f856cac4000)
libQt53D.so.5 => /usr/lib/x86_64-linux-gnu/libQt53D.so.5 (0x00007f856c588000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f856c375000)
libatiuki.so.1 => /usr/lib/fglrx/libatiuki.so.1 (0x00007f856c25a000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f856c056000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f856be4f000)
Klingt nach "es braucht die QT 5 Bibiotheken".
Aaaaber... ich habs jetzt mal bei Knoppix probiert: kann es sein dass Du eine 32Bit-Variante installiert hast - die Binaerdatei ist ja fuer 64Bit gemacht.
$ objdump -f jentos_v1.1_linux
jentos_v1.1_linux: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x000000000041b675
Lass dich davon aber nicht abhalten: man kann zwar selbst das Programm kompilieren (Code ist verfuegbar) aber "lerne erstmal" die Grundzuege mit Monkey/Ted.
bye
Ron
Das klingt doch schon besser:
knoppix@Microknoppix:/media/sdb8/Monkey/MonkeyX77a$ ldd jentos_v1.1_linux
\tdas Programm ist nicht dynamisch gelinkt
LDD ... linked ... nicht I/i.
$ ldd jentos_v1.1_linux
bye
Ron
Keine Fehlermeldung
bei Ausführung "Idd jentos_v1.1_linux"
knoppix@Microknoppix:/media/sdb8/Monkey/MonkeyX77a$ Idd jentos_v1.1_linux
bash: Idd: Kommando nicht gefunden.
Keine Fehlermeldung?
fuehre im dortigen Verzeichnis mal aus "ldd dateiname", dann zeigt es dir, ob irgend eine der "Bibliotheken"fehlt (sicher was QT-maessiges).
bye
Ron
Ich hab's schon versucht über Terminal zu starten (Wird immer angeboten "ausführen", "im Terminal ausführen", "abbrechen". Geht auch nicht.