Objekte kollision, beide Objekte löschen
Übersicht

![]() |
marcel_bohnBetreff: Objekte kollision, beide Objekte löschen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ich bins nochmal, hab schon wieder ein problem ![]() Ich will, das wenn zwei objekte eines verschiedenen typs kollidieren beide objekte gelöscht werden. bsp.: Type alien Field x,y end type type rocket field x,y end type Wenn irgendein bild "a.alien" mit einem bild "r.rocket" kollidiert sollen beide verschwinden. ich bekomm nur hin das ein objekt gelöscht wird ![]() ich hoffe ihr versteht mein Problem und könnt mir weiter helfen ![]() schon mal danke im Vorraus! |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Versuche es mal so:
Code: [AUSKLAPPEN] For r.rocket=Each rocket
For a.alien=Each alien If ImagesCollide(a\bild,a\x,a\y,a\frame,r\bild,r\x,r\y,r\frame) Then FreeImage a\bild:Delete a.alien FreeImage r\bild:Delete r.rocket Exit EndIf Next Next |
||
- Zuletzt bearbeitet von Johannes´ am Sa, Nov 06, 2010 16:49, insgesamt 2-mal bearbeitet
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für mehrere Objekte, die das selbe Bild zeichnen sollte man aber nicht immer das selbe Bild neu laden. Nur so als Hinweis.
MFG |
||
![]() |
marcel_bohn |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmmm... das geht irgendwie nicht... sobald ich
"delete r.rocket" hin schreibe stürzt das programm bei der kollision ab und gibt die fehlermeldung "objekt doesn't exist" raus. wenn ich das "delete r.rocket" weg mach und nur noch das "delete a.alien" da steht funktioniert es, bloß meine rakete fliegt dann leider ungehindert weiter... |
||
![]() |
marcel_bohn |
![]() Antworten mit Zitat ![]() |
---|---|---|
es funktioniert ja alles, die gegner kommen auf mich zu und ich kann sie kaputt schießen nur will ich halt das die rakete verschwindet wenn sie einen gegner getroffen hat | ||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gib deinem Raketen und deinem Alientyp ein Attribut IsDead#
Dann machst du folgendes: BlitzBasic: [AUSKLAPPEN] For r.rocket=Each rocket Dann brauchst du nur noch sone Funktion für jeden Typ: BlitzBasic: [AUSKLAPPEN] Function DeleteDead() Lg, M0rgenstern. Nebenbei: Vergiss das mit dem Freeimage ganz schnell. Dadurch löschst du das Bild aus dem Speicher und das wäre fatal. |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast recht, der Code kann nicht funktionieren, da er auch nach dem Löschen einer Rakete versucht, die noch folgenden Aliens mit dieser gelöschten Rakete auf Kollision zu prüfen. Ich habe meinen Code eben geändert, versuche es mal damit. | ||
![]() |
marcel_bohn |
![]() Antworten mit Zitat ![]() |
---|---|---|
alles klar, danke morgenstern ![]() Vielen Vielen Dank!!! |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Morgenstern:
Ich habe bisher am Anfang immer ein Bild geladen, das dann mit CopyImage kopiert, wenn ich es mehrmals gebraucht habe. Wenn das kopierte Bild nicht mehr gebraucht wurde, dann habe ich es eben mit FreeImage gelöscht. Was ist am Löschen dann fatal und wie löst du soetwas? @marcel_bohn: Du musst sie ja nicht verwenden, aber es würde mich jetzt schon interessieren, ob meine Lösung funktioniert. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Johannes´ hat Folgendes geschrieben: Was ist am Löschen dann fatal und wie löst du soetwas?
Dasselbe Bild kann beliebig oft auf den Bildschirm gezaubert oder sonstwie verwendet werden. Was dann einfach den Grakaspeicher entlastet. Ein und denselben Datenhaufen mehrmals in den Speicher zu schaufeln ist Murks ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
marcel_bohn |
![]() Antworten mit Zitat ![]() |
---|---|---|
wo hast du denn den code gepostet? | ||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Hubsi und Morgenstern:
Gut, dann war das Löschen wirklich Murks. Ich habe es wohl zusehr auf den 3D-Bereich bezogen. Danke, ich habe dazugelernt. @ marcel_bohn: Ich habe den ersten Code einfach abgeändert. Mit dem Löschen der Bilder scheint aber wirklich Murks zu sein, lass also das FreeImage weg. |
||
![]() |
marcel_bohn |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok also mit exit funzt es genau so gut ![]() |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Johannes:
Mit Copyimage? Das brauchst du nicht. Du machst einfach folgendes: BlitzBasic: [AUSKLAPPEN] Type Gegner Und in der hauptschleife: BlitzBasic: [AUSKLAPPEN] Global enemyimg = LoadImage("pfad") Du hast somit ne Referenz, also ein Zeiger auf das Bild. Es liegt einmal im Speicher und kann von allen "Gegner" Instanzen genutzt werden. Wenn du Copyimage machst, dann hast verbrauchst du pro erstellten Gegner einmal den Speicherplatz den das komplette Bild braucht. Mit einem Zeiger belegst du aber gar keinen Speicherplatz. Lg, M0rgenstern |
||
![]() |
marcel_bohn |
![]() Antworten mit Zitat ![]() |
---|---|---|
@MOrgenstern
ich versteh noch nicht so ganz warum das bild in das objekt geladen wird Enemy\img = enemyimg kannst du mir das erklären? |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Stück Code das ich da gepostet habe zeigt einen Teil vom Code wie er am Anfang des Programms stehen könnte.
Du lädst erstmal das Bild global ein: BlitzBasic: [AUSKLAPPEN] Global enemyimg = LoadImage("pfad") Dass der Gegner Type ein eigenes Image Feld hat ist einfach praktisch, weil man so schnell Gegner erstellen kann die unterschiedlich aussehen. Du kannst dem einen Das oben geladene Bild übergeben oder ein anderes. Dann hast du die Möglichkeit eine DrawMethode zu basteln: BlitzBasic: [AUSKLAPPEN] Function DrawEnemies() Dadurch ist es egal, welches Bild der Gegner geladen hat, es wird immer das Bild gemalt das gerade zur INstanz gehört. Dadurch kann man halt relativ einfach verschiedene Gegnertypen erstellen. Lg, M0rgenstern |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ M0rgenstern:
Deine Methode ist wirklich um Einiges besser. Ich orientiere mich wohl viel zu sehr am 3D-Bereich. Aber in der Hauptschleife willst du doch nicht wirklich das Bild laden und die Gegner erstellen? ![]() Ansonsten danke ich dir. |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, nicht in der Hauptschleife.
Hab mich falsch ausgedrückt, tut mir leid. Ich meinte VOR der Hauptschleife^^ Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group