bin zu dumm für ne if abfrage

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: bin zu dumm für ne if abfrage

BeitragDo, Okt 04, 2007 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hi blitzer !

bitte nicht lachen, aber ich bekomm folgende abfrage nicht gebacken.

Also ich bin wieder bei meinen "npc s" und wollte die gerade in mein rpg integrieren, als mir noch n kleiner bug aufgefallen ist. Ich überprüfe nur immer die x bzw. y koords der npcs auf der map und somit kanns natürlich mal passieren, dass ein npc stehen bleibt, obwohl da kein hinderniss(der spieler) im weg ist.

Hmm schwer zu erklären ...

Code: [AUSKLAPPEN]


 [ N ]  <--- das ist mein npc          x = 2 y = 2

     

      [ H ]  <---- das ist mein hero  x = 3 y = 5



Der npc bewegt sich nach rechts. So jetzt bleibt der npc stehen, da er nur immer die x werte überprüft ( if npc_x + 1 = hero_x usw.). So nungut dann wollt ich halt die y abfrage noch mit reinhauen, aber genau da ist das problem... ich bin zu dumm dafür ^^

- Wenn npc_x <> hero_x und npc_y <> hero_y then move else stop -

Code: [AUSKLAPPEN]

 ... And  (info3\bot_x +1) <> hx And (info3\bot_y) <> hy  Then
              info3\bot_x = info3\bot_x + 1


Warum geht das nicht ??

mfg Dottakopf

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Okt 04, 2007 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatten wir gestern schon. Weil ql:AND auf binärer Ebene untersucht.

Code: [AUSKLAPPEN]
a=1
b=1

For q=1 To 20
   Print a+" And "+b+" = "+(a And b)
   a=a+1
Next

WaitKey
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Dottakopf

BeitragDo, Okt 04, 2007 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
danke !

ich hab schon erkannt woran es demnach liegt ...

(bot_x +1) <> hx ist dieser einmal 0 funtzt der "and" befehl nimma und daher kommt dann auch keine bewegung mehr zustande und die y überprüfung wird dan ausgellassen (oder?)

Aber wie bekomme ich jetzt die x überprüfung ( bot_x +1) und die y überprüfung gleichzeitig rein ?
Weil der npc soll ja nur dann stehen bleiben, wenn er bei rechtsbewegung links neben meinem hero steht ^^

Ich bräuchte sowas wie:
Wenn bot_x +1 = hero_x and bot_y <> hero_y then move

aber das sind dann nochmal n paar zeilen mehr... und solche überprüfungen find ich unübersichtlich

mfg Dottakopf

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Okt 04, 2007 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Vergiss mein ersten Beitrag, da er in deiner Konstelation nicht zutrifft. Du hast ja schliesslich auf beiden Seiten jeweils deine Bedingung schon geschrieben. Embarassed

Ansonsten komme ich mit deinen Variablennamen nicht ganz klar. Mal schauen...

Zitat:
Weil der npc soll ja nur dann stehen bleiben, wenn er bei rechtsbewegung links neben meinem hero steht ^^


Und wie sieht's aus, wenn er eine linksbewegung macht? Also soll dein Bot ja dein Hero verfolgen? Wie wär's wenn du eine Abstandsmessung machen würdest? Wenn der Abstand größer als n ist, wird bewegt. Wie bewegen sich deine Figuren, Pixelweise oder Tileweise? Bei tileweiser Bewegung kannst du auch als Zileposition des Bots jeweils die letzte Position vom Hero nehmen.

Im übrigen würde ich auf sowas hier verzichten:

Zitat:
Code: [AUSKLAPPEN]
... And  (info3\bot_x +1) <> hx And (info3\bot_y) <> hy  Then
              info3\bot_x = info3\bot_x + 1


Also auf Bewegung die auf Hardcoding beruht. Berechne die Laufrichtung lieber direkt und spar die jede einzelne Richtung abzufragen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Dottakopf

BeitragDo, Okt 04, 2007 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt ^^ geniale erklärung.

Ne diese bot funktion ist eigentlich total simpel. Es gibt vier richtungen welche sich immer wieder mal ändern.

So und für jede richtung mach ich halt dann n paar colisions checks.
npc zu map, npc zu spieler, npc zu npc. Die bewegungen sind tile zu tile.

ich überprüf halt immer nur die umliegenden tiles des bots.

Ich hab au grad ne notlösung gefunden, welche des zum laufen bringt. Aber zeigen tu ich die lieber keinem ^^ (ich sag nur 4 richrungen 12 abfragen^^)

mfg Dottakopf

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Okt 04, 2007 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht ist es das hier, was du suchst. Hab mal schnell was gemacht.

Code: [AUSKLAPPEN]
Graphics 512,512,0,2
SetBuffer BackBuffer()

xp=16
yp=16
xb=32
yb=32




While Not KeyHit(1)
   
   If MilliSecs()>ms+500
      ms=MilliSecs()
      If Abs(xp-xb)>1 Or Abs(yp-yb)>1
         xb=xb+Sgn(xp-xb)
         yb=yb+Sgn(yp-yb)
      End If
   End If
   
   If KeyHit(203) Then xp=xp-1
   If KeyHit(205) Then xp=xp+1
   If KeyHit(200) Then yp=yp-1
   If KeyHit(208) Then yp=yp+1
   
   Rect xb*8,yb*8,8,8,0
   Rect xp*8,yp*8,8,8,1
   
   Flip
   Cls
Wend
End


Siehe dazu:
ql:Abs
ql:Sgn

edit1: Oder wenn du nicht willst, dass dein Bot diagonal laufen soll:

Code: [AUSKLAPPEN]
Graphics 512,512,0,2
SetBuffer BackBuffer()

xp=16
yp=16
xb=32
yb=32




While Not KeyHit(1)
   
   If MilliSecs()>ms+500
      ms=MilliSecs()
      
      If Abs(xp-xb)>Abs(yp-yb)
         If Abs(xp-xb)>1 Then xb=xb+Sgn(xp-xb)
      Else
         If Abs(yp-yb)>1 Then yb=yb+Sgn(yp-yb)
      End If
   End If
   
   If KeyHit(203) Then xp=xp-1
   If KeyHit(205) Then xp=xp+1
   If KeyHit(200) Then yp=yp-1
   If KeyHit(208) Then yp=yp+1
   
   Rect xb*8,yb*8,8,8,0
   Rect xp*8,yp*8,8,8,1
   
   Flip
   Cls
Wend
End

Dottakopf

BeitragDo, Okt 04, 2007 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
cool danke ! weis ich zu schätzen.

Ich möchte zwar nicht, dass mich der bot verfolgt aber das ist ja hier bei dem beispiel egal. Mit den befehlen hab ich noch nicht gearbeitet. Werd mich da mal reinarbeiten !

danke

mfg Dottakopf

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group