image does not exist (gelöst)
Übersicht

MisterKnisterBetreff: image does not exist (gelöst) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
ich will ein spiel programmieren wo man mit einem helikopter rumfliegen und schießen kann und hab erstmal nur eine zielscheibe gemacht, auf die man schießen kann, aber ich hab da das problem, dass wenn das programm startet die fehlermeldung "objekt does not exist" kommt. der code: Code: [AUSKLAPPEN] Graphics 640, 480, 16, 2
SetBuffer BackBuffer() heli = LoadAnimImage("heli2.bmp", 80, 30, 0, 6) rakete = LoadAnimImage("rakete.bmp", 33, 12, 0, 5) zielscheibe = LoadImage ("zielscheibe.bmp") anzahlzielscheibe = 0 Type schuss Field raketex Field raketey End Type Type zielscheibe Field zielscheibex Field zielscheibey End Type Repeat Cls If MilliSecs() > tmrHeli + 100 Then tmrHeli = MilliSecs() frmHeli = (frmHeli + 1) Mod 6 End If If MilliSecs() > tmrRakete + 100 Then tmrRakete = MilliSecs() frmRakete = (frmRakete + 1) Mod 5 End If If KeyHit(57) Then s.schuss = New schuss s\raketex = helix + 10 s\raketey = heliy + 20 EndIf For s.schuss = Each schuss DrawImage rakete, s\raketex, s\raketey, frmRakete s\raketex = s\raketex - raketespeed s\raketey = s\raketey + 0 If s\raketex <0 Then Delete s.schuss Next If KeyDown(203) Then helix = helix - helispeed - 1 ;linke Pfeiltaste If KeyDown(205) Then helix = helix + helispeed + 1 ;rechte Pfeiltaste If KeyDown(200) Then heliy = heliy - helispeed - 1 ;obige Pfeiltaste If KeyDown(208) Then heliy = heliy + helispeed + 1 ;untige Pfeiltaste DrawImage heli, helix, heliy, frmHeli If anzahlzielscheibe = 0 Then z.zielscheibe = New zielscheibe z\zielscheibex = Rnd(1, 640) z\zielscheibey = Rnd(1, 480) anzahlzielscheibe = anzahlzielscheibe + 1 EndIf For z.zielscheibe = Each zielscheibe DrawImage zielscheibe, z\zielscheibex, z\zielscheibey If ImagesCollide(heli, helix, heliy, 0, speed, a\speedx, a\speedy, 0) Then helispeed = helispeed + 1 If ImagesCollide(rakete, s\raketex, s\raketey, frmRakete, zielscheibe, z\zielscheibex, z\zielscheibey, 0) Then Delete z.zielscheibe Next If helispeed >3 Then helispeed = 3 Text 0, 0, "Spieler 1" Text 0, 8, "Geschwindigkeit " + helispeed Flip Until KeyHit(1) End ich will da auch erstmal garkeine explosion haben, das kommt später ... |
||
- Zuletzt bearbeitet von MisterKnister am Sa, Aug 16, 2008 8:26, insgesamt 3-mal bearbeitet
![]() |
Jo0oker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Benutz mal bitte um den Code herrum [ code ][ /code ]
Versuch mal bei den Tyes noch das Field Image zu erstellen, und es mit Hilfe von CopyImage dann in das Feld zu speichern. un bei der Collision schreibst du dann: RaketenTypes Code: [AUSKLAPPEN] Type schuss Field raketex Field raketey Field rImage End Type Code: [AUSKLAPPEN] Rakete erstellen If KeyHit(57) Then s.schuss = New schuss s\raketex = helix + 10 s\raketey = heliy + 20 s\rImage = CopyImage(rakete) EndIf Rakete bewegen: Code: [AUSKLAPPEN] For s.schuss = Each schuss DrawImage rakete, s\raketex, s\raketey, frmRakete s\raketex = s\raketex - raketespeed s\raketey = s\raketey + 0 If s\raketex <0 Then Delete s.schuss Next Kollision Code: [AUSKLAPPEN] For z.zielscheibe = Each zielscheibe DrawImage zielscheibe, z\zielscheibex, z\zielscheibey If ImagesCollide(heli, helix, heliy, 0, speed, a\speedx, a\speedy, 0) Then helispeed = helispeed + 1 If ImagesCollide(s\rakete, s\raketex, s\raketey, frmRakete, zielscheibe, z\zielscheibex, z\zielscheibey, 0) Then Delete z.zielscheibe Next Denn jeder schuss ist ja ein anderes Bild. P.S.: Ich hab mal wider kein BB zur hand, aber so müsste es gehen lg Jo0oker |
||
Tehadon, das kostenlose 3D RPG
www.tehadon.de http://www.blitzforum.de/worklogs/14/ Das Abenteuer wird beginnen! |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das geht so auch nich "oject does not exist" ... ich schick mal den ganzen code:
Code: [AUSKLAPPEN] Graphics 640, 480, 16, 2 SetBuffer BackBuffer() heli = LoadAnimImage("heli2.bmp", 80, 30, 0, 6) rakete = LoadAnimImage("rakete.bmp", 33, 12, 0, 5) speed = LoadImage("speed.bmp") zielscheibe = LoadImage ("zielscheibe.bmp") fontvariable = LoadFont("Arial") SetFont fontvariable MaskImage heli, 255, 255, 255 MaskImage zielscheibe, 255, 255, 255 raketespeed = 1 helispeed = 1 anzahlspeed = 0 anzahlzielscheibe = 0 helix = 200 heliy = 300 Type schuss Field raketex Field raketey Field rImage End Type Type speed Field speedx Field speedy End Type Type zielscheibe Field zielscheibex Field zielscheibey End Type Repeat Cls If MilliSecs() > tmrHeli + 100 Then tmrHeli = MilliSecs() frmHeli = (frmHeli + 1) Mod 6 End If If MilliSecs() > tmrRakete + 100 Then tmrRakete = MilliSecs() frmRakete = (frmRakete + 1) Mod 5 End If If KeyHit(57) Then s.schuss = New schuss s\raketex = helix + 10 s\raketey = heliy + 20 s\rImage = CopyImage(rakete) EndIf For s.schuss = Each schuss DrawImage s\rImage, s\raketex, s\raketey, frmRakete s\raketex = s\raketex - raketespeed s\raketey = s\raketey + 0 If s\raketex <0 Then Delete s.schuss Next If KeyDown(203) Then helix = helix - helispeed - 1 ;linke Pfeiltaste If KeyDown(205) Then helix = helix + helispeed + 1 ;rechte Pfeiltaste If KeyDown(200) Then heliy = heliy - helispeed - 1 ;obige Pfeiltaste If KeyDown(208) Then heliy = heliy + helispeed + 1 ;untige Pfeiltaste DrawImage heli, helix, heliy, frmHeli If anzahlspeed = 0 Then a.speed = New speed a\speedx = Rnd(1, 640) a\speedy = Rnd(1, 480) anzahlspeed = anzahlspeed + 1 EndIf For a.speed = Each speed DrawImage speed, a\speedx,a\speedy If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then helispeed = helispeed + 1 If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then anzahlspeed = 0 If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then Delete a.speed Next If anzahlzielscheibe = 0 Then z.zielscheibe = New zielscheibe z\zielscheibex = Rnd(1, 640) z\zielscheibey = Rnd(1, 480) anzahlzielscheibe = anzahlzielscheibe + 1 EndIf For z.zielscheibe = Each zielscheibe DrawImage zielscheibe, z\zielscheibex, z\zielscheibey If ImagesCollide(s\rImage, s\raketex, s\raketey, frmRakete, zielscheibe, z\zielscheibex, z\zielscheibey, 0) Then Delete z.zielscheibe Next If helispeed >3 Then helispeed = 3 Text 0, 0, "Spieler 1" Text 0, 8, "Geschwindigkeit " + helispeed Flip Until KeyHit(1) End |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
MisterKnister:
Der Debugger markiert eine Zeile, wenn der Fehler auftritt. In dieser Zeile versuchst du ein Bild zu verwenden, das nicht existiert. (evtl typo im variablennamen?) JoOoker: Was hat es für ein Sinn, ein bild, das sich eh nie ändert, zigfach zu kopieren und den Speicher zuzumüllen? ciao, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
xaerox |
![]() Antworten mit Zitat ![]() |
---|---|---|
überall hast du bei der variabölen deklarierung "Global" vergessen | ||
Biker sind wahre Helden.
Auch Musiker. |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
smiley0412 : was meinst du damit?
xaerox: ich hab jetzt alle variablen mit global deklariert, aber es entsteht immernoch der gleiche fehler das ist die zeile die bb markiert: Code: [AUSKLAPPEN] If ImagesCollide(s\rImage, s\raketex, s\raketey, frmRakete, zielscheibe, z\zielscheibex, z\zielscheibey, 0) Then Delete z.zielscheibe
|
||
Fredko |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wahrscheinlich willst du es dann nächste Zeile nocheinmal verweden, was nicht klappen kann, da es nicht funktioniert, am besten z.b.
Code: [AUSKLAPPEN] if bla>11 ;Bedingung löschen=1 endif If löschen=1 ;Wenn die variable 1 ist Delete objekt.typename endif Dann können auch mehrere Sachen zum löschen benutzt werden, z.b. abgelaufener timer, kollision oder nicht im bildschirm. |
||
! |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
fredkostudio : das habe ich gemacht aber jetzt kommt die meldung " variable must be a type"
das ist der geänderte code Code: [AUSKLAPPEN] If ImagesCollide(s\rImage, s\raketex, s\raketey, frmRakete, zielscheibe, ; diese zeile und
z\zielscheibex, z\zielscheibey, 0) Then ; diese zeile werden markiert( sind in wirklichkeit eine zeile) loeschen=1 EndIf If anzahlzielscheibe = 0 Then z.zielscheibe = New zielscheibe z\zielscheibex = Rnd(1, 640) z\zielscheibey = Rnd(1, 480) anzahlzielscheibe = anzahlzielscheibe + 1 EndIf For z.zielscheibe = Each zielscheibe DrawImage zielscheibe, z\zielscheibex, z\zielscheibey If loeschen = 0 Then Delete z.zielscheibe Next |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mische mich mal auch ganz kurz ein...
Anstatt 3x auf Kollision zu Prüfen... Code: [AUSKLAPPEN] For a.speed = Each speed DrawImage speed, a\speedx,a\speedy If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then helispeed = helispeed + 1 If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then anzahlspeed = 0 If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then Delete a.speed Next ...fässt man alle Anweisungen zusammen: Code: [AUSKLAPPEN] For a.speed = Each speed
DrawImage speed, a\speedx,a\speedy If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then helispeed = helispeed + 1 anzahlspeed = 0 Delete a.speed EndIf Next |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke aber ich hab da jetzt so einige collisionen reingemacht und immernoch kommt object does not exist
kann mir bitte jemand sagen, wie das gehen könnte, dass dann der type zielscheibe und der type schuss, die kollidieren gelöscht werden? |
||
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie kann ich das denn machen, dass der schuss und die scheibe gelöscht werden? | ||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bitte kein doppelpost .. dafür ist der edit button da...
gib mal deinen aktuellen gesamte ncode dann seh ich mir das eben mal kurz an.. lg poller |
||
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier ist der code
Code: [AUSKLAPPEN] Graphics 640, 480, 16, 2 SetBuffer BackBuffer() Global heli = LoadAnimImage("heli2.bmp", 80, 30, 0, 6) Global rakete = LoadAnimImage("rakete.bmp", 33, 12, 0, 5) Global speed = LoadImage("speed.bmp") Global ziel = LoadImage("zielscheibe.bmp") fontvariable = LoadFont("Arial") SetFont fontvariable MaskImage heli, 255, 255, 255 MaskImage ziel, 255, 255, 255 Global raketespeed = 1 Global helispeed = 1 Global anzahlspeed = 0 Global anzahlziel = 0 Global loeschen = 0 helix = 200 heliy = 300 Type schuss Field raketex Field raketey Field rImage End Type Type speed Field speedx Field speedy End Type Type ziel Field zielx Field ziely End Type Repeat Cls If MilliSecs() > tmrHeli + 100 Then tmrHeli = MilliSecs() frmHeli = (frmHeli + 1) Mod 6 End If If MilliSecs() > tmrRakete + 100 Then tmrRakete = MilliSecs() frmRakete = (frmRakete + 1) Mod 5 End If If KeyHit(57) Then s.schuss = New schuss s\raketex = helix + 10 s\raketey = heliy + 20 s\rImage = rakete EndIf For s.schuss = Each schuss DrawImage rakete, s\raketex, s\raketey, frmRakete s\raketex = s\raketex - raketespeed s\raketey = s\raketey + 0 If s\raketex <0 Then Delete s.schuss Next If KeyDown(203) Then helix = helix - helispeed - 1 ;linke Pfeiltaste If KeyDown(205) Then helix = helix + helispeed + 1 ;rechte Pfeiltaste If KeyDown(200) Then heliy = heliy - helispeed - 1 ;obige Pfeiltaste If KeyDown(208) Then heliy = heliy + helispeed + 1 ;untige Pfeiltaste DrawImage heli, helix, heliy, frmHeli If anzahlspeed = 0 Then a.speed = New speed a\speedx = Rnd(1, 640) a\speedy = Rnd(1, 480) anzahlspeed = anzahlspeed + 1 EndIf For a.speed = Each speed DrawImage speed, a\speedx,a\speedy If ImagesCollide(heli, helix, heliy, frmHeli, speed, a\speedx, a\speedy, 0) Then helispeed = helispeed + 1 anzahlspeed = 0 Delete a.speed EndIf Next If anzahlziel = 0 Then l.ziel = New ziel l\zielx = Rnd(1, 640) l\ziely = Rnd(1, 480) anzahlziel = anzahlziel + 1 EndIf For i.ziel = Each ziel DrawImage ziel, l\zielx, l\ziely If ImagesCollide(heli, helix, heliy, 0, speed, a\speedx, a\speedy, 0) Then Delete i.ziel Next If helispeed >3 Then helispeed = 3 Text 0, 0, "Spieler 1" Text 0, 8, "Geschwindigkeit " + helispeed loeschen = 0 Flip Until KeyHit(1) End |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For i.ziel = Each ziel
DrawImage ziel, l\zielx, l\ziely If ImagesCollide(heli, helix, heliy, 0, speed, a\speedx, a\speedy, 0) Then Delete i.ziel Next Hier liegt das Problem. Du prüfst Äpfel mit Birnen... Es kann hier oft mal vorkommen, dass a.speed vorher gelöscht wurde und nun hast du a=Null mit dem du weiterarbeiten willst. Ich denke, das was du brauchst wär ne verschachtelte For-Schleife, also: Code: [AUSKLAPPEN] For i.ziel = Each ziel
DrawImage ziel, i\zielx, i\ziely For a.speed = Each speed If ImagesCollide(heli, helix, heliy, 0, speed, a\speedx, a\speedy, 0) Then Delete i.ziel Next Next Alle Angaben ohne Gewähr, kanns wegen fehlenden Graphiken ja nicht testen. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke an alle die mir geholfen haben ich glaub ich hab das jetzt begriffen, warum da "oject does not exist" kam ich hab das jetzt geändert und es klappt alles prima ![]() ich hab das jetzt so gelöst, dass die zielscheibe immer 20 leben verliert wenn sie getroffen wird und dann in einer anderen function gelöscht wird wenn sie getroffen wird. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group