type position prüfen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: type position prüfen

BeitragDo, Okt 18, 2007 9:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blitzer !

Ich möchte meinen npc nun collisionen geben(npc zu npc), aber irgendwie ist das doch schwerer als ich dachte.
Bevor ein npc ein tile weitergeht, soll erst geschaut werden, ob sich dort nicht ein npc befindet. Eigentlich nix anderes als ne hinderniss prüfung, die ja schon funtzt.

Also es soll überprüft werden, ob sich links neben dem npc auf der tilemap ein typ bot befindet:
die abfrage geht aber nicht. Ich hab dachte, das es diese 2 ansätze sein müssten. Aber das ist irgendwie immer true Evil or Very Mad

Code: [AUSKLAPPEN]


for info3.bot  = each bot

               If map(info3\bot_x -1,info3\bot_y) = info3\bot_x Then
                  links nicht frei
              End If
next


beim 2ten ansatz hab ich mir gedacht, vll braucht er die map position ?

Code: [AUSKLAPPEN]

               if map(info3\bot_x -1,info3\bot_y) = map(info3\bot_x,info3\bot_y) then
                   blubber
               end if



Kann mir einer helfen ?

mfg Dottakopf

The_Nici

BeitragDo, Okt 18, 2007 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, 1. schaust du, ob links neben dem info3\ info3\ steht? Mit zuviel alkohol kann man vll. neben sich stehen...aber...naja.
Beim zweiten guggst du, ob die mapposition=True ist? Also 1?

Und - sind die info3\bot koordinaten Pixel oder Tiles?

Dottakopf

BeitragDo, Okt 18, 2007 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
sie sind tiles. (naja eigendlich pixel, beim malen werden x und y*32 gennommen,da ein tile 32*32 pixel)

Ich weis des hört sich jetzt doof an, aber wie löse ich des?

mfg Dottakopf

Silver_Knee

BeitragDo, Okt 18, 2007 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
mybot.bot will sehen ob sein feld rechts frei ist

besetzt=0
For b.bot=each bot
 if (b\x+1=mybot\x) and (b\y=mybot\y)
  ;feld rechts neben mybot wird von b.bot besetzt
  besetzt=1
  exit
 endif
next

if besetzt=1
...


du musst die koordinaten von dem überprüfenden bot mit den koordinaten von allen anderen vergleichen.

Dottakopf

BeitragDo, Okt 18, 2007 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ähm hab so noch nicht mit types gearbeitet Embarassed

"mybot.bot" ist doch ne neue instanz oder ? wie lege ich die fest

also ich erstelle hier meinen "normalen" bot
Code: [AUSKLAPPEN]


     info3.bot = new bot
         info3\bot_x .....



und wie bekomme ich den rein ? was muss ich dem den zuweisen:

Code: [AUSKLAPPEN]


     info3.bot = new bot
        info3\bot_x .....
 
         mybot.bot = new bot
              mybot.bx = info3\bot_x


mfg Dottakopf

Dottakopf

BeitragMo, Okt 22, 2007 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal.

Ich entschuldige mich gleich vorab, für diesen doppelpost, jedoch muss ich leider zugeben, dass ich den lösungsweg vom prinzip her verstanden hab, aber ich die umsetzung nicht zustande bekomme.

meine Fragen:

wo erstellst du mybot.bot ?
ich nehme an, das dieser so erstellt wird "mybot.bot = new bot"
Welche werte werden zugewiesen, und wann?
einmal zum startup und in der main muss des ja auch irgendwie vertreten sein.

Ich hab das so verstanden:


Code: [AUSKLAPPEN]

;ich definiere meinen typ
type bot
 field bx
 field by
 field blubber
end type

;ich erstelle die bots beim mapchange

          for x = start_anzahl to max_anzahl
               info.bot = new bot
                   info\bx = ...
                   usw.

                       mybot.bot = new bot
                           mybot\bx = info\bx
                           mybot\by = info\by
           next


wie binde ich das mybot ein ? Ich muss das mybot ja auch irgendwie in der main akuallisieren, da der bot sich ja bewegt. Kann mir das bitte jemand genauer erklären ?

mfg Dottakopf

Meoqan

BeitragMo, Okt 22, 2007 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
so würde ich das lössen:
(code nicht geprüft)

Code: [AUSKLAPPEN]

; types

Type bot
field name$
field ID
field x
field y
field runX
field runY
end type
global bot.bot

type bot_run
field ID
field from_x
field from_y
field to_x
field to_y
end type
global bot_run.bot_run

;initalisiere bot
bot=new bot
bot\name$="werner"
bot_id=bot_id+1
bot\ID=bot_id
bot\x=0
bot\y=0
; wert 1 oder -1
bot\runX=0
bot\runY=1

bot=new bot
bot\name$="ulf"
bot_id=bot_id+1
bot\ID=bot_id
bot\x=0
bot\y=1
;wert 1 oder -1
bot\runX=0
bot\runY=0

; feld prüfen
;bots zählen
bot_anzahl=0
for bot.bot = each bot
bot_anzahl=bot_anzahl+1
if bot\runX<>0 OR bot\runY<>0  then
bot_run=new bot_run
bot_run\ID=bot\ID
bot_run\from_x=bot\x
bot_run\from_y=bot\y
bot_run\to_x=bot\runX
bot_run\to_y=bot\runY
endif
next

;prüfen
for bot_run.bot_run = each bot_run
;erechne des feld zu dem gelaufen wird
bot_pruf_X=bot_run\from_x+bot_run\to_x
bot_pruf_Y=bot_run\from_y+bot_run\to_y

;vergleiche ziel positionen
bot_pruf=0
for bot.bot =each bot
if bot_pruf_X=bot\x then
if bot_pruf_Y=bot\y then
bot_pruf=1
endif
endif
next

;wenn kein bot an dieser stelle steht bewegung speichern
if bot_pruf=0 then
for bot.bot = each bot
if bot_run\ID=bot\ID then
bot\x=bot\x+bot\runX
bot\y=bot\y+bot\runY
bot\runX=0
bot\runY=0
endif
next
endif

;bot_run löschen
Delete bot_run
next ;bot_run ende

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group