Hallo.
Ich versuche zurzeit GDI+ zu lernen.
Und ich will grade so ein bewegtes Männchen machen.
Da hab ich mal ne Frage.
Wie schafft man es, dass sich z.B ein Linie bewegt.
Da kann ich nämlich dann was lernen.
GDI Plus
-
- [ offen ]
-
Bakku -
9. März 2010 um 17:38 -
Geschlossen -
Erledigt
-
-
Ich hoffe damit kannst du etwas anfangen: https://autoit.de/index.php?page=Thread&threadID=18261
Ansonsten Linien bewegen geht mit:
$x
$y
$speed
und in der Schleife dann (wenn die Linie sich waagerecht bewegen soll) $x+=$speed
und an die Koordinaten dann die Linie zeichnen
Dass sich ein Bild bewwegt geht mit Timern, wo du z-B. alle 50 ms ein nächstes Bild im Array anzeigst -
Dein Run Game kenn ich schon.^^
Mal ne Frage:
Was heißt += oder -= oder &= ???? -
[autoit]
[/autoit][autoit][/autoit][autoit]
;+=
$i += 1
; ist dasselbe wie:
$i = $i + 1;-=
[/autoit][autoit][/autoit][autoit]
$i -= 1
; ist dasselbe wie:
$i = $i - 1;&=
[/autoit]
$i &= $a
; ist dasselbe wie:
$i = $i & $a -
Ahh ok^^
Danke -
Also eine Linie bewegen lassen ist nich schwer.
Ich hoffe mal, du weisst, wie man eine Linie zeichnet
Und eine, oder mehrere Punkte musst du mit Variablen belegen, und diese Variablen
in Loops bzw. Funktionen verändern.
Am besten nicht zu groß, und schon haste ne bewegung. -
Kann jemand vielleicht ein Beispiel Skript zeigen, welches sehr leicht verständlich ist??
-
[autoit]
#include <GDIPlus.au3>
[/autoit][autoit][/autoit][autoit]
#include <Misc.au3>$wx=100
[/autoit]
$wy=100
$gui=GUICreate("Test",$wx,$wy)
GUISetState()
_GDIPlus_Startup()
$gra=_GDIPlus_GraphicsCreateFromHWND($gui) ;Für das Beispiel ohne Backbuffer - Flimmert!
$x=0
$y=50
$speed=1
while 1
if _IsPressed("1B") or GUIGetMsg()=-3 then ExitLoop
$x+=$speed
_GDIPlus_GraphicsClear($gra,0xFF00FF00) ;grün
_GDIPlus_GraphicsDrawLine($gra,$x,$y,$x+20,$y) ;kein Pen angegeben, also schwarz
sleep(50)
WEnd
_GDIPlus_GraphicsDispose($gra)
_GDIPlus_Shutdown()
GUIDelete($gui)
ExitFür bewegende Bilder kannst du ja mal versuchen das Run! Game zu verstehen
-
Ah okay.
Danke. Das versteh ich sicher.
Dein Run!-Game find ich noch n bissle schwer.^^ -
Habe damit n bissel rumprobiert.
Ist gar nicht so schwer.
Aber trotzdem noch ne Frage:Warum funktioniert des nicht ohne:
[autoit]_GDIPlus_GraphicsClear($gra,0xFF00FF00) ;grün
[/autoit]??
-
Dann bleiben die alten Linien
-
Ja, das hab ich schon herausgefunden
Aber meine Frage war, WIESO es dann nicht funktioniert -
WAS funktioniert denn nicht?
-
Es funktioniert alles Prima.
[autoit]
Ich wollte nur wissen, WIESO es ohne:_GDIPlus_GraphicsClear($gra,0xFF00FF00) ;grün
[/autoit]nicht funktioniert.
-
Clear "cleart" (engl.: leeren [sowas]) den Bildschirm bzw. es leert den Bildschirm oder macht einfach nur ein Rechteck mit der gewünschten Farbe oben drauf. Auf jedenfall wird sonst nicht der Hintergrund nicht grün und die alten Linien werden ncht überschriben. $gra leert sich ja nicht selber, ch kann nicht gut erklären aber ich hfofe du ahst es verstanden
-
Ja das habe ich sogar verstanden^^.
Muss man das immer machen, wenn man was bewegen will??
Und was gibts da für Möglichkeiten $gra zu leeren? -
Ja das musst du immer machen denn es gibt keine Funktionen in GDIPlus um Dinge zu "animieren". Ich wüsste allerdings nicht was es an dieser Methode auszusetzen gäbe
Du kannst ja versuchen die Grafik $gra neu zu erzeugen, aber ob das jetzt Rechenzeit einspart oder sonstige Vorteile bringt...
Ich denke das Grundprinzip um Dinge in GDIPlus zu "bewegen" ist:
-Grafik leeren (_GDIPlus_GraphicsClear($gra, 0xFFFF0000))
-Koordinaten neu berechnen
-Elemente neu zeichnen
Später kommt dann noch ein Buffer hinzu damit das ganze nicht so flackert -
Frage, gibt es eine GDI+ Funktion, um eine 3D Kugel zu erstellen?
-
GDIPlus ist eigentlich für 2-dimensionale Objekte gedacht, aber du kannst es ja so aussehen lassen: link
-
Für Würfel ohne GDI+ hab ich das mal irgendwo gefunden:
-