warum kann ich die variablen nicht auf 0 setzten?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: warum kann ich die variablen nicht auf 0 setzten?

BeitragMo, Mai 03, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
hi...also:
ein figur beweg sich nach rechts. wenn diese figur an einer stelle kollidiert, läuft sie nach unten. das ganze versuhce ich so:
(nur der code für di lenkung an sich)
Code: [AUSKLAPPEN]

If r6  ;nach rechts
   speed = 2
   speed2 = 0
   speed3 = 0
   speed4 = 0
   figur_posx = figur_posx + speed   ;rechts
EndIf
If r2 ;nach unten
   speed = 0
   speed2 = 0
   speed3 = 2
   speed4 = 0
   figur_posy = figur_posy + speed3   ;unten
EndIf



Eigentlich müsste das doch gehen!? Die Variablen habe ich so globalisiert:
Code: [AUSKLAPPEN]

Global speed=0 ,speed2=0 , speed3=0 , speed4=0


Also auf jeden Fall tritt der Fehler auf, wenn die Figur an diesen Punkt kommt, läuft sie nach unten und immmer noch nach rechts, also schräg nach rechts....hm......
~ Hey Ho Let's Go ~

Michi1988

Betreff: Re: warum kann ich die variablen nicht auf 0 setzten?

BeitragMo, Mai 03, 2004 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hääääääääääääääääääääääääääääääääh?

Also Hätte das ganz anders gemacht:

Code: [AUSKLAPPEN]

if keydown(203) then x=x-2
if keydown(205) then x=x+2
if keydown(200) then y=y-2
if keydown(208) then y=y+2


Michi
 

Blitzkrieg Bop

BeitragMo, Mai 03, 2004 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ja michi, so würde es gehen, doch es gibt mehrer möglihckeiten im späteren spieleverlauf, wie die figur an den gegenstand kommen kann.
von daher möchte ich es so machen, das alle speed variablen vorher auf 0 gesetzt werden.
~ Hey Ho Let's Go ~

Suco-X

Betreff: ....

BeitragMo, Mai 03, 2004 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs doch mal anders.
nach dem Motto

speed = 2*keydown(205)


So kannst du das ein wenig handlicher machen. Des keydown(205) gibt dir ja 1 zurück falls du die taste drückst, und wen nicht, 0. Hast du also überall gewonnen und das ohne große Code verwendung.

bye
EDIT
Habe ebend mal ne gute Lösung getestet.
Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()


Global x = 1024/2, y = 768/2



Repeat
Cls

Oval x,y,20,20

speed = (2*KeyDown(205))-(2*KeyDown(203))
speed2 = (2*KeyDown(208))-(2*KeyDown(200))

x = x+speed
y = y+speed2



Flip
Until KeyHit(1)

Alle richtungen klappen nun. Und das in nur 4 Zeilen.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Blitzkrieg Bop

BeitragMo, Mai 03, 2004 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, kanst du mir das ganze in ein wenig code einbetten, ich verstehe net ganz....außerdem bewegt dich diese figur ja automatisch ohne tastendruck

oh mo....muss eben dein editiertes beispiel lesen
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragMo, Mai 03, 2004 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
j gut, wie gesagt: wie genau geht das nun wnen sich die figur slebst bewegt?
~ Hey Ho Let's Go ~

Suco-X

Betreff: .....

BeitragMo, Mai 03, 2004 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Space bewegt sich die Figur automatisch, wen du nochmal Space drückst wieder nicht. Den rest kannst du dir dazu selbst ausmalen, ganz einfach erweiterbar.
Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()


Global x = 1024/2, y = 768/2



Repeat
Cls

Oval x,y,20,20

speed = (2*KeyDown(205))-(2*KeyDown(203)) Or (selbst_bewegen)
speed2 = (2*KeyDown(208))-(2*KeyDown(200))

x = x+speed
y = y+speed2

If KeyHit(57)
   selbst_bewegen=1-selbst_bewegen
EndIf






Flip
Until KeyHit(1)

bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Blitzkrieg Bop

BeitragMo, Mai 03, 2004 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
also so ganz versteh ich den code net! was suchen die scancodes der ofeiltasten noch da? und wie genau werden nun die speed variablen eingeshcalten und was für einen wert haben sie Question
~ Hey Ho Let's Go ~

Suco-X

Betreff: ......

BeitragMo, Mai 03, 2004 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, die Figur soll sich wohl garnicht mit den Pfeiltasten bewegen lassen. War abgelenkt von Michis Post. Diesen Aufbau kannst du aber auch dafür benutzen.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Blitzkrieg Bop

BeitragMo, Mai 03, 2004 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, und wie genau ? wnen ich jetzt 2*keydown[scancode] wegnehme, sind doch keine zahlen mehr anwesend oder was!?
~ Hey Ho Let's Go ~

Suco-X

Betreff: .....

BeitragMo, Mai 03, 2004 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, das wars aber für heute. Beispiel für Automatische Bewegung schnell geschrieben und ausbaufähig.


Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()


Global x = 1024/2, y = 768/2

Const richtung_rechts=1, richtung_links=-1
Const richtung_oben=-1,richtung_unten=1

Global figur_richtungx, figur_richtungy


Repeat
Cls

Oval x,y,20,20

x = x+speed
y = y+speed2


speed = figur_richtungx ; Beliebigen Wert dazu Addieren/Multiplizieren
speed2 = figur_richtungy ; Beliebigen Wert dazu Addieren/Multiplizieren


If Rand(0,100)=1
   figur_richtungx = Rnd(richtung_links,richtung_rechts)
   figur_richtungy = Rnd(richtung_oben,richtung_unten)
EndIf


If x>1024
   x = 0
ElseIf x<0
   x = 1024
EndIf

If y>768
   y=0
ElseIf y<0
   y=768
EndIf



Flip
Until KeyHit(1)

Edit
Ok, noch paar kleinigkeiten vorsichtshalber zur besseren verständniss
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Blitzkrieg Bop

BeitragMo, Mai 03, 2004 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist doch shcon fast zu umständlich?
ich habe:
Code: [AUSKLAPPEN]

If r6
speed = speed_test   
speed2 = speed2_test
   figur_posx = figur_posx + speed   ;rechts
endIf

und oben:
Code: [AUSKLAPPEN]

Global speed_test=-1 ,speed2_test=1


da geht jedenfallss nix
~ Hey Ho Let's Go ~
 

zocker2150

Betreff: @ Blitzkrieg Bop

BeitragDi, Mai 04, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem, dass du hast ist folgendes.

deine "Figur" geht auch nach rechts wenn da nix mehr ist.
denn deine If-Abfrage mit

Code: [AUSKLAPPEN]
If r6  ;nach rechts
   speed = 2
   speed2 = 0
   speed3 = 0
   speed4 = 0
   figur_posx = figur_posx + speed   ;rechts
EndIf


beachtet nicht den "Levelrand".
Du musst also noch eine If-Abfrage machen.

z.B. (Wobei mir noch unklar ist wie du "r6" ansprichst bzw. änderst)

Code: [AUSKLAPPEN]

If r6 Then
   If Level$(figur_posx, firgur_posy+2)  <> LevelRand Then   ; Wie du deinen RAND des Levels definiert hast.
      figur_posx = figur_posx + speed                    ; Bewegung nach rechts - "speed" kannst du ja in Global schon mit 2 deklarieren oder gleich 2 Reinschreiben, da ja mit "r6" immer 2 schritte nach rechts gegangen wird.
   End If
End If


Achtung:
Da du immer 2 schritte machst, kann es sein, dass wenn du ein Feld vor der Wand stehst die Figur nicht ein Feld vorlaufen KANN!
 

Blitzkrieg Bop

BeitragDi, Mai 04, 2004 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, also zur erklärung:
wenn man sich den ziffernblock betrachtet:
ist r6 = true geht figur nach rechts
ist r2 = true geht die figur nach unten ...
und je nachdem von welcher seite die figur kollidiert, ist r2,r4,r,8,r6 = true.
was ich nicht verstehe ist , was du mit dem levbelrand meinst? das hat doch garnichts damit zu tun, weil das kann ja auch genau in der mitte des spiefeldes ablaufen, ohne randberührungen
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group