Grafik bewegen
Übersicht

CodeFishBetreff: Grafik bewegen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, ich hab versucht laut Tutorial eine Grafik zu bewegen, geht aber nicht?
cursor = LoadImage("Bilder\cursor.bmp") z = 1 x = 100 While z < 10 Cls DrawImage cursor,x,100 If KeyHit(scancode) Then x = x + 5 Wend Stop Was stimmt da noch nicht ? |
||
René Meyer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Einiges. :-)
Zum einen machst Du das Ende der Schleife vom Wert von z abhängig. z ändert aber nie ihren Wert, daher endet die Schleife nicht. Die Bewegung machst Du von einem Tastendruck abhängig. KeyHit() erwartet einen Tastencode als Parameter. Du übergibst aber eine Variable, und die ist - da Du ihr keinen Wert zugewiesen hast - 0. Dann solltest Du Dich mit dem Prinzip der Doppelpufferung vertraut machen. Dein Bild wird in schneller Folge gelöscht und neu gezeichnet; das flimmert. Wenn Du Blitz Plus benutzt, funktioniert es so, wie Du es gemacht hast, überhaupt nicht. |
||
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal ein einfaches Beispiel dazu:
Code: [AUSKLAPPEN] Graphics 640, 480, 16, 2 SetBuffer BackBuffer() x = 320: y = 240 Repeat Cls Text 0,0, "Benutze die Pfeiltasten zum Bewegen des Kästchens." Text 0,20, "Koordinaten: " + x + "/" + y If KeyDown(200) Then y = y - 5 ; hoch If KeyDown(208) Then y = y + 5 ; runter If KeyDown(203) Then x = x - 5 ; links If KeyDown(205) Then x = x + 5 ; rechts Rect x-2,y-2,4,4,1 ; Ersatz für das Bild Flip Until KeyHit(1) Wenn du aber einen Cursor bewegen willst, würde sich ja vielleicht eine Maussteuerung anbieten. Die ist auch einfacher anzuwenden. Code: [AUSKLAPPEN] Graphics 640, 480, 16, 0 SetBuffer BackBuffer() Repeat Cls Text 0,0, "Benutze die Maus zum Bewegen des Kästchens." Text 0,20, "Koordinaten: " + MouseX() + "/" + MouseY() Color 255,0,0 Rect MouseX()-4,MouseY()-4,8,8,1 ; Ersatz für das Bild Flip Until KeyHit(1) Die Befehle MouseX() und MouseY() geben immer die aktuellen Koordinaten der Maus zurück und können wie Variablen eingesetzt werden. ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
CodeFish |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok erstmal danke.
Ich lern da ja ertsnoch, und zu den KexBefehlen jhab ich nicht wirklich viel nützliches in der Hilfe gefundne. Das mit der Maus hab ich auch schon hinbekommen. |
||
CodeFish |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, brauch mal wieder eure Hilfe, ich will ne Abfrage das der Spieler den Bildschirm nicht verlassen kann. Aber es Funzt net so richtig.
[code] ; Initialisierung Graphics 640, 480, 32 SetBuffer BackBuffer() Dim Frame(3.2) Speed = 4 x = 320 y = 400 ; Grafik Global Player = LoadImage("Bilder/communicator.bmp") ; Daten festlegen Frame(0.0) = 0 Frame(0.1) = 100 Frame(1.0) = 101 Frame(1.1) = 539 Frame(2.0) = 540 Frame(2.1) = 640 Repeat Cls ; Spieler bewegen If KeyDown(200) Then y = y - Speed ; hoch If KeyDown(208) Then y = y + Speed ; runter If KeyDown(203) Then x = x - Speed ; links If KeyDown(205) Then x = x + Speed ; rechts If x < Frame(0.1) Then x = x + Speed If x > Frame(2.0) Then x = x - Speed DrawImage Player, x, y Flip Until KeyHit(1) [code] mit Frame(2.0) gehts nicht, aber mit Frame(1.1) gehts zb? Woran ligt das?[/code] |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei deiner Bedingung für den rechten Bildschirmrand "Frame(2.0)" wird dein Spieler erst dann gestoppt, wenn er sich exakt außerhalb des Bildschirmes befindet. Du musst das noch berücksichtigen, indem du z.B. schreibst:
Code: [AUSKLAPPEN] If x > Frame(2.0)-SpielerBildBreiteInPixeln Then x = x - Speed |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
CodeFish |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, wenn ich das mache, geht es zwar, aber verstehen tu ich es noch net, denn wenn ich Frame(1.1) zb nehme gehts normal? | ||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das müßtest du doch selbst feststellen können oder? Ich verstehe sowieso nicht, was diese "Frame(xyz)" zollen. Wenn sich dein Spieler nur in einem bestimmten rechteckigen Bereich bewegen soll, dann reichen doch 4 Werte. Linkes, rechtes, oberes und unteres Limit. Und wenn dann irgendwas nicht funktioniert, lass dir doch mal die Zahlenwerte der entsprechenden Grenze auf dem Bildschirm ausgeben:
Code: [AUSKLAPPEN] ... Repeat Cls Text 0,0, "Spieler: " + x + "/" + y Text 0,10, "Rechtes Limit:" + Frame(2.1) ... Wenn ich Variablen nehme, dann nenne ich sie immer Code: [AUSKLAPPEN] MinX = 0 MinY = 0 MaxX = 640 MaxY = 480 Und falls diese Grenzen immer konstant bleiben, könntest du auch direkt die Zahlenwerte einsetzen. [/quote] |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group