check ob variable schon belegt
Übersicht

hitokiriBetreff: check ob variable schon belegt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
morgen.
ich habe mir eine methode überlegt, wie ich kollisionen ausschliesslich über eine virtuell erstellte DIM map pixelgenau lösen kann, die wohl sehr viel schneller als rectoverlap oder ähnliches wäre+pixelgenau, jedoch noch mit einem problem behaftet ist: also angenommen ich habe DIM map (800,600) jede map hat werte zwischen 1 und x wobei vorher deklariert wurde, welcher wert für was steht (gegner etc.) die map wird nach allen anderen updates durchgeführt aber vor dem draw. gegner z.b. übergeben ihren x und y wert nach ihrem update an map(x,y). nun weiss ich allerdings nicht genau, wie ich das anstellen soll zu überprüfen ob die variable schon beschrieben wurde, also um auf kollision zu überprüfen. die einzige möglichkeit auf die ich mit BB kan ist die werte von 1 bis x so zu wählen, dass jedes produkt aus 2 zahlen, also z.b aus gegner und schuss, niemals den wert eines objektes oder ähnlichem haben kann. ich hoffe irgendjemand kapiert was ich meine. gibt es nicht irgendeine möglichkeit zu überprüfen, ob eine variable in diesem "durchgang" schon einmal beschrieben wurde ? vielleicht mal ein beispiel um das zu veranschaulichen: [code] DIM map(800,600) DIM gegner(20,5) ; 20 gegner, 5 stati (bewegung, schuss, tod, bla) DIM schuss(100,6); max 100 onscreen und geblubber ;in den jeweiligen update() funktionen ist dann x und y koordinate ;mit zugehöriger DIM gespeichert. dann: for i = to (gegner oder schussanzahl im moment auf dem screen) map(xgegner,ygegner)=gegner(also z.b.10) [/code] jetzt müsste ich aber eben rausfinden ob die variable nun schon in diesem durchlauf beschrieben wurde wenn ich dasselbe mit den schüssen mache und falls ich auf eine schon beschriebene stosse, dann eine kollision passieren zu lassen. ich könnte natürlich 480000 flags machen aber das scheint mir zu viel rechenarbeit und würde den sinn zerstören. ich habe schon die help rauf und runtergelesen aber eine variable zu "locken" oder sowas hab ich nicht gefunden. die momentane idee wäre eben zu addieren, also : for i = to (gegner oder schussanzahl im moment auf dem screen) map(xgegner,ygegner)=gegner(also z.b.10)+map(xgegner,ygegner) und meine zahlen die markieren ob es nichts, schuss, gegner, bla ist so wählen, dass eine addition niemals den wert haben kann wie eine zahl die ein einzelnes objekt markiert, aber das ist höllische kopfrechnerei. hoffe das macht das ganze etwas deutlicher. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
"gibt es nicht irgendeine möglichkeit zu überprüfen, ob eine variable in diesem "durchgang" schon einmal beschrieben wurde ? "
warum setzt du nicht vor dem überprüfen alles auf 0 und fragst dann immer ab ob map(x,y) 0 ist oder nicht. wenn schon was drin steht wurde es wohl schonmal beschrieben, wenns 0 ist ... äh nicht. |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
klar mach ich die "map" jedesmal wieder auf 0 bei einem neuen durchlauf der programmschleife. aber ich will ja dann prüfen ob gegner und kugel z.b. zusammenstossen, die beide ihre momentane position nach dem update an die map übergeben, da kann ich es wohl schlecht auf null machen. muss es wohl doch dim(800,600,1) machen. | ||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich glaub ich versteh dein system auch garnicht...
ist 800/600 dein spielfeld?? soll das auf einem bildschirm sein? also is deine tilemap eigentlich jeder pixel des spielfeldes??? dann frag ich mich wie du überhaupt die objekte, falls sie größer als ein pixel sind in die tilemap kriegen willst? du müßtest dann jeden pixel vom bildschirm in die tilemap schreiben, falls du pixelgenaue kollision willst ... falls jedes objekt nur einen pixel groß ist, kannst du ja einfach die x und y position von jedem objekt vergleichen ... BlitzBasic: [AUSKLAPPEN]
|
||
A Cray is the only computer that runs an endless loop in less than four hours. |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich benutze keine tilemaps weil ich keine tiles verwende. das ganze soll gleichzeitig mein "script" sein und kollisionen überprüfen, im dritten feld soll dann jetzt nach aktueller idee ein wert stehen, durch den ich sofort weiss, welche beiden objekte kollidiert sind und diese beiden "delete". damit habe ich eben script und kollisonsabfrage in einem und muss nicht für jedes objekt nochmal einzeln durchgehen und ich habe es pixelgenau. + meine types haben alle ein field "width" und ein field "length" oder runde ein field "radius" | ||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
okay, ich glaub ich weiß jetzt fast was du vorhast ... du hast ein dim(800,600), hast paar objekte und du willst in diesem einen array alle objekte speichern? die id, x und y? und wenn 2 objekte an einem ort sind was dann? kollision? ist ja dann nicht mehr schwierig. aber es ist nich möglich x und y in einer variable zu speichern... naja, bzw eigentlich schon indem du das byte in 2 halbbytes aufteilst, da haste dann aber jeweils nur die werte 0-127... du könntest also für ne map die dim(128,128) groß ist x/y in einer variable speichern. wie du das machst, da kannste dir mal and und or anschauen ... aber ich frag mich auch wie du diese objekte in der map dann ansprechen willst ... da müßteste immer die schleife von 1 bis 800 und 1 bis 600 durchgehen ... !? willst du das? wie nah lieg ich mit meiner vermutung das es das ist was du tun willst an der wahrheit?
sorry.... vergiß es. hab mir nochmal dein erstes post durchgelesen. jetzt blick ich wieder garnix mehr.... ich glaub ich denk ein andermal weiter drüber nach... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also..... *denk*
ich mach mir ein dim map(800,600,1) an sich sind alle felder erstmal null. objekte übergeben dann ihre x und y koordinate an die map nach ihrem "update", also zum beispiel ein alien mit höhe 40 und länge 60, mit automidhadle, an der stelle 300/200 befindlich, übergibt mit ner for schleife nach seinem update an die von ihm belegten felder der map (x,y,0) sagen wir 30 für enemytyp 1. an das feld (x,y,1) übergibt es seinen dim. wenn nun eine rakete angefliegt kommt und irgendwo is wo das alien eben auch ist dann ist (x,y,0) > 0 was bedeutet es kommt zu einer kollision. ich delete dann einfach die bullet und den alien.blubb(x,y,1). und setze (x,y,0) und (x,y,1) ja dann automatisch im nächsten durchlauf auf null. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
übergibt seinen dim? äh... was?
so wie es jetzt aussieht überprüfst du einfach immer nur die x und y koordinaten der beiden objekte bullet und rakete, dafür brauchst du keine map die 800x600 groß ist, dafür brauchste auch kein imagescollide, dafür mußte einfach nur guggen ob alien position = bullet position ist. basta. fertig. |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe aber eben nicht nur aliens und bullets. ausserdem wollte ich es als skript verwenden, also nicht per millisecs oder so sondern eben per map in der die gegner schon an ihren neuen positionen drinstehen weil ihre bewegung eben fest geskriptet ist | ||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich geb auf.
oder zeig mal code, vielleicht fällt mir das einfacher als deine erklärungen zu entwirren. was du "skripten" willst, mit ner x und ner y koordinate in einem array, das frage ich mich auch. ein skript ist ne mehr oder weniger lange befehlsfolge die bei einem ereignis aktiviert wird, wie du das alles in dem array festlegen willst, das frage ich mich. aber vermutlich kapier ichs nur wieder nicht.... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group