bild bewegen! wie??

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

suncity

Betreff: bild bewegen! wie??

BeitragDo, Mai 11, 2006 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy Hi bb-ler!

hab vor kurzem angefangen... Razz


also ich will ein game machen, bei dem man ein bild (spieler) mit den tastatur-tasten steuern kann. aber nur nach links oder nach rechts!

die tast-keys hab ich mit ner if
Code: [AUSKLAPPEN]
if KeyDown(203) Then
;bewegen des bildes nach links
Cls
Endif

jetzt wollt ich halt reinchreiben, dass sich das bild nach links bewegt Shocked

greetz
denis

Firstdeathmaker

BeitragDo, Mai 11, 2006 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest dir eine Variable erstellen in der du die aktuelle Position des Spielers speicherst. Das Bild des Spielers zeichnest du dann immer relativ dieser Variable ein, z.B.:

drawimage ImageDesSpielers, SpielerXPosition, 40

wobei "SpielerXPosition" die Variable ist die du in der oben geposteten Schleife manipulierst, also veränderst, z.B. so:

if Keyhit(lala)
SpielerXPosition = SpielerXPosition + 1
endif
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Willi die Rübe

BeitragDo, Mai 11, 2006 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du zeichnest ja das Bild ein mit ql:DrawImage . Deshalb kannst du ja die X und Y Koodinaten angeben. Ich nehme an, dass du einen festen Wert dafür eingesetzt hast. Ersetzte diese durch Variablen und erhöhe sie in der If/Else Konstruktion um den Geschwindigkeitsfaktor.
Noch ein kleiner Tipp du kannst das Bild gar nicht sehen, wenn du danach den Buffer leerst.

Greetz
 

dennis13

BeitragSa, Mai 13, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Das müsste dann ungefähr so ausehen:
____________________________

Graphics 800,600

Apptitle"Bild bewegen"

x=200
y=200
Bild=Loadimage("Bild.jpg")
Drawimage Bild,x,y,0

Repeat

If keydown(200) Then x=x+5
If keydown(208) then y=y+5

Until Keyhit(1)
end
_________________________________


So, die x und y werte musst du noch nach wunsch verändern , die "Schnelligkeit" wie sich das bild bewegen muss kannst du an "x=x+?" ändern , je größer die Zahl desto schneller gehts Very Happy ...

So ich hoffe ich konnte dir helfen

MFG

Kryan

BeitragSa, Mai 13, 2006 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@dennis:

Code: [AUSKLAPPEN]
If keydown(200) Then x=x+5


ist doch nicht dein ernst, oder??
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

darth

Betreff: ..

BeitragSo, Mai 14, 2006 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
if keydown(200) dann bild RAUF! also y=y-5
if keydown(208) dann bild RUNTER! also y=y+5
if keydown(203) dann bild LINKS! also x=x-5
if keydown(205) dann bild RECHTS! also x=x+5

wieso?
das koordinatensystem (x/y) beginnt in der linken, oberen ecke, und geht dann nach unten (y-achse) und nach rechts (x-achse)

allgemein:
Code: [AUSKLAPPEN]

graphics 800,600
 x=200
 y=200
 bild=loadimage(...)

 repeat
  drawimage bild,x,y ;wieso hier? => siehe nachhher
  if keyhit(...) then ...
  flip : cls ;wieso das? => siehe nachher
 until keyhit(1)
end


erklärungen:

wieso muss das bild in der hauptschleife (repeat -- until) gezeichnet werden?
wenn du den befehl drawimage VOR der schleife schreibst, dann wird das bild nur einmal gemalt, dann geht das programm in die schleife hinein und dreht dort seine runden, ohne dass dein bild weiter beachtet wird.
also musst du es in der hauptschleife malen, wenn du es bewegen willst.

wieso flip und cls?
flip übergibt grafiken/texte an den frontbuffer, dieser zeichnet dir dein zeug dann auf den bildschirm - ist allerdings nicht immer nötig, schadet aber selten bis nie es zu schreiben.
TIP: flip hat eine FPS begrenzung von 60, das lässt sich mit "flip 0" ausschalten.
cls löscht den bildschirm. wenn du diesen befehl NICHT hineinschreibst, dann wird dein bild sich nicht bewegen, sondern eine spur hinter sich herziehen.

was lehrt man daraus?
zuerst sollte man einige tutorials oder beispiel codes ansehen, damit man eine minimale ahnung vom programmieren hat. dann sollte man sich genau überlegen was die einzelnen befehle machen und wie man sie anzuordnen hat. dann sollte man sich eine winzige ahnung von algorithmen und logik verschaffen.
kurz gesagt: RTFM!!!
Diese Signatur ist leer.

Kryan

BeitragSo, Mai 14, 2006 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
@darthgamer:

wenn man so einen provokanten text verfasst, dann sollte man wenigstens darauf achten, dass alles fehlerlos ist:

Zitat:
wieso flip und cls?
flip übergibt grafiken/texte an den frontbuffer, dieser zeichnet dir dein zeug dann auf den bildschirm - ist allerdings nicht immer nötig, schadet aber selten bis nie es zu schreiben.
TIP: flip hat eine FPS begrenzung von 60, das lässt sich mit "flip 0" ausschalten.
cls löscht den bildschirm. wenn du diesen befehl NICHT hineinschreibst, dann wird dein bild sich nicht bewegen, sondern eine spur hinter sich herziehen.


Wenn du das alles wegnehmen würdest, dann ist es OK!
Denn...wo findet man in deinem Code ein SetBuffer BackBuffer() Very Happy ?
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Hellfront

BeitragSo, Mai 14, 2006 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht benutzt er ja BlitzPlus da brauczht man ja keins.

darth

Betreff: ..

BeitragSo, Mai 14, 2006 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

zumindest bei meiner b3d version brauche ich im 2d bereich KEINen backbuffer.

"beweis":
Code: [AUSKLAPPEN]
graphics 800,600 ;wobei ich pers. immer graphics3d nehme (wegen flimmern)
bild=loadimage("blubb.bmp")
while not keyhit(1)
 drawimage bild,0,0
 flip : cls
wend
end

=> man erstelle ein beliebiges bild blubb.bmp und lasse den code laufen, und siehe da: ES LEBT!

und zudem habe ich geschrieben dass das flip nicht zwingend notwendig ist
(flip schiebt zeug von backbuffer in den hauptbuffer, wenn man aber nur den hauptbuffer hat ist es unnötig... aber wie gesagt, es schadet nicht Smile )
Diese Signatur ist leer.

Kryan

BeitragSo, Mai 14, 2006 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ja schön und gut,
aber damit hast du kein double-buffering, was du dann da auch noch so groß im code erwähnst ("; wieso das => siehe nachher")... Confused
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

darth

Betreff: ..

BeitragMo, Mai 15, 2006 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Confused ich hab vergessen im urspr. beitrag das mit den buffern zu erwähnen...
man muss es nicht unbedingt verwenden, ich wollte es nur sagen für ein nächstes mal (wenn er es verwendet), und dann hab ichs scheinbar vergessen.
verklar mich :/
Diese Signatur ist leer.

Christoph

BeitragMo, Mai 15, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
So ist auf jeden Fall richtig:
Code: [AUSKLAPPEN]
graphics 800,600,32,1
setbuffer backbuffer()
bild=loadimage("mann.bmp")
x=400:y=200

repeat
  cls
  if keydown(203) then x=x-2
  if keydown(205) then x=x+2
  drawimage bild,x,y
  flip
until keydown(1)
end


Also Leute, wenn ihr das nicht hinkriegt wie seht ihr denn dann erst aus wenn ihr das Männchen noch "animieren" wollt??? Very Happy

Schranz0r

BeitragMo, Mai 15, 2006 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Apptitle "Bild Bewegen"

Global Bild = LoadÍmage("Bildname.bmp")        ; Bild Laden
Global PosX  ; Globale X Deklarieren
Global PosY  ; Globale Y Deklarieren

While Not KeyHit(1)                                   ; Wenn nicht ESC gedrückt dann
   Cls                                                       ; Bildschirm löschen
      If KeyDown(203) Then PosX = PosX - 1  ; Nach links
      If KeyDown(205) Then PosX = PosX + 1 ; Nach rechts
      If KeyDown(200) Then PosY = PosY - 1 ; Nach oben
      If KeyDown(208) Then PosY = PosY + 1 ; Nach unten
      DrawImage Bild, PosX, PosY                   ; Bild "Zeichen"
      Flip                                                        ; ja Flip halt ^^
Wend                                                         ; ende der Whileschleife
End                                                            ; Ende des Programms


Hoffe das Hilft dir ^^
  • Zuletzt bearbeitet von Schranz0r am Mo, Mai 15, 2006 19:48, insgesamt 2-mal bearbeitet

Thorsten

BeitragMo, Mai 15, 2006 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
das stimmt nicht Wink

die tasten sind vertauscht (horizontal und vertikal umtauschen)

Schranz0r

BeitragMo, Mai 15, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
BlindGuy hat Folgendes geschrieben:
das stimmt nicht Wink

die tasten sind vertauscht (horizontal und vertikal umtauschen)


Jo lol......
Thx hab ich wohl im kopf vertauscht ^^

Christoph

BeitragDi, Mai 16, 2006 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Tasten sind nicht vertauscht...

Schranz0r

BeitragDi, Mai 16, 2006 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Christoph hat Folgendes geschrieben:
Die Tasten sind nicht vertauscht...


Ja richtig, hab ich ja auch schon gefixt Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group