image does not exist (gelöst)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

MisterKnister

Betreff: image does not exist (gelöst)

BeitragDi, Aug 12, 2008 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 12, 2008 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 12, 2008 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 12, 2008 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 12, 2008 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
überall hast du bei der variabölen deklarierung "Global" vergessen
Biker sind wahre Helden.
Auch Musiker.
 

MisterKnister

BeitragDi, Aug 12, 2008 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 12, 2008 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 12, 2008 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragDi, Aug 12, 2008 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

MisterKnister

BeitragDi, Aug 12, 2008 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Aug 13, 2008 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
wie kann ich das denn machen, dass der schuss und die scheibe gelöscht werden?
 

da_poller

BeitragMi, Aug 13, 2008 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 14, 2008 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 14, 2008 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 14, 2008 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group