for -> next schleife in while -> wend schleife funzt n

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

*GHOST*

Betreff: for -> next schleife in while -> wend schleife funzt n

BeitragSo, Jan 30, 2005 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
o=10
For o=1 To 10
o=o+1
PositionEntity player2, 10,2,o
Delay 1
Next


diese schleife hab ich in einer
Code: [AUSKLAPPEN]
While Not KeyDown(1)


Code: [AUSKLAPPEN]
Wend


schleife drin, und der typ bewegt sich nicht. was ist das problem?
 

biegl

BeitragSo, Jan 30, 2005 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
so...

Code: [AUSKLAPPEN]

o=10
For i=1 To 10
o=o+1
PositionEntity player2, 10,2,o
Delay 1
Next


du kannst nicht mit einer variable 2saxhen gleichzeitig machen!
 

David

BeitragSo, Jan 30, 2005 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Du solltest in einer For Schleife die Zählervariable nicht ändern, sie Inkrementiert sich ja sowiso in angegebenen Schritten.
Das du "o" auf 10 setzt ist auch sinnlos, da "for o = 1" o wieder auf den Startwert 1 setzt.

Also:
Code: [AUSKLAPPEN]

for o = 1 to 10
  PositionEntity player2, 10, 2, o
  delay 1
next


Delay 1 hat auch nur wenig Sinn, da die Schleife unnötig ausgebremst wird...
Nunja, aber warum bewegt sich der Spieler nicht? Ganz einfach... "player2" wird in der Schleife auf die Position P( 10 | 2 | 10 ) gesetzt und erst dann wird der Bildschirm refresht... d.h. du siehst von der Bewegung nichts.

Lösung:

Code: [AUSKLAPPEN]

o = 1

while not keyhit( 1 )
;...
o = o + 1

if ( o > 10 ) then o = 1

PositionEntity player2, 10, 2, o

;...


Edit:

@biegl: Der Code ist genaus unsinnig... Smile

grüße
 

*GHOST*

BeitragSo, Jan 30, 2005 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
sry, david, aber dann seh ich garnichts mehr Wink


wie funzen den jetz die bewegungen gleichzeitig wenn man sich bewegen kann. ist doch bei einem ego-shooter auch so, die teile bewegen sich auch wenn man selbst steuert. dann muss das ja in der hauptschleife passieren. oder?
 

David

BeitragSo, Jan 30, 2005 10:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Wie das funktioniert? Genau! In der Hauptschleife! Smile

:-->
Du musst die Welt updaten und den Doppelpuffer flippen.
U.a. ist es auch zu schnell als das du was siehst, bau halt mal ne Bremse ein.

grüße
 

*GHOST*

BeitragSo, Jan 30, 2005 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
sry aber das hab ich jetzt nicht verstanden... Wink

was bedeutet überhaupt der puffer?
 

David

BeitragSo, Jan 30, 2005 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Code: [AUSKLAPPEN]

Graphics3D 640,480
SetBuffer BackBuffer()

camera=CreateCamera()

light=CreateLight()
RotateEntity light,90,0,0

cube=CreateCube()

o = 1

While Not KeyDown( 1 )
  o = o + 1
  PositionEntity cube, 0, 0, o

  RenderWorld
  Flip
Wend

End


Zum Doublebuffer:
http://www.computerbase.de/lexikon/Doublebuffer

grüße
 

*GHOST*

BeitragSo, Jan 30, 2005 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
dankeschön, david! Smile

aber der würfel geht ja jetzt endlos in die unendlichen weiten des blitzprogramms. kann man den stoppen?
 

David

BeitragSo, Jan 30, 2005 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja, eine einfach If Anweisung sollte genügen...

Code: [AUSKLAPPEN]

if o < {dein Wert} then o = o + 1


statt

Code: [AUSKLAPPEN]

o = o + 1


grüße
 

*GHOST*

BeitragSo, Jan 30, 2005 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, aber dann hab ich das problem wenn ich:

Code: [AUSKLAPPEN]
o = 10

If o < 20 Then o = o + 0.1
PositionEntity dragon, 10, 2, o
Flip


hab ohne davor Code: [AUSKLAPPEN]
While Not KeyDown(1)


und Code: [AUSKLAPPEN]
wend


dann funzt das net, wenn ichs dranmache, bleibt alles schwarz bis ich key(1) drücke...
 

David

BeitragSo, Jan 30, 2005 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Du brauchst eine Float Variable dafür:

Code: [AUSKLAPPEN]

o# = 20


Im Ganzen also:

Code: [AUSKLAPPEN]

Graphics3D 640,480
SetBuffer BackBuffer()

camera=CreateCamera()

light=CreateLight()
RotateEntity light,90,0,0

cube=CreateCube()

o# = 10

While Not KeyDown( 1 )
   If o < 20 Then o# = o# + 0.1
   PositionEntity cube, 0, 0, o
   
   RenderWorld
   Flip
Wend

End


Sollte so dann auch klappen.

grüße
 

*GHOST*

BeitragSo, Jan 30, 2005 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, funzt! Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group