illegal memory adress (nach 7 gegnern)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

da_poller

Betreff: illegal memory adress (nach 7 gegnern)

BeitragDi, Dez 12, 2006 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;variablen*******************************************************
Global mausx,mausy
Global framenummer
Global bild
Global bild2
Global bild3
Global gegnererschaffen
Global mh
Global kills
Global gegnertimer
Global gegnertimerrun=1
Global schwierigkeit

schwierigkeit=1000

;grafik und bilder***********************************************
Graphics 800,600,16,2
SetBuffer BackBuffer()
AppTitle("poller's chaos proggi")
ClsColor 255,255,255
bild3=LoadAnimImage("bild3.bmp",40,40,0,2)
MaskImage bild3,255,255,255
MidHandle bild3
bild2=LoadAnimImage("bild2.bmp",120,40,0,2)
MaskImage bild2,255,255,255
bild=LoadAnimImage ("bild.bmp",40,40,0,6)
MaskImage bild,255,255,255

;type gegner------------------------------------
Type Tgegner
Field x
Field y
Field sterb
Field sterb2
Field sterbtimer
End Type

;Type schuss------------------------------------
Type Tschuss
Field x
Field y
Field fortsch
Field doe
End Type

;hauptschleife***********************************************************
While Not KeyHit(1)
ClsColor 255,0,255
Cls
;mausabfrage------------------------------------------
If MouseHit(1) Then
mh=1
Else
mh=0
EndIf
;buttonbild---------------------------------------------
If ImageRectCollide (bild2,500,400,0,mausx-1,mausy-1,2,2) Then
   DrawImage bild2,500,400,1   
Else
   DrawImage bild2,500,400,0
EndIf

;gegnerershaffen------------------------------
If gegnertimerrun=1 Then
   gegnertimer=MilliSecs()
   gegnertimerrun=0
EndIf
If MilliSecs()>gegnertimer+schwierigkeit Then
   gegner.Tgegner=New Tgegner
   gegner\x=Rnd(20,780)
   gegner\y=Rnd(20,580)
   gegner\sterb=0
   gegner\sterb2=0
   gegner\sterbtimer=MilliSecs()
   gegneranzahl=gegneranzahl+1
   gegnertimerrun=1
EndIf

;gegner---------------------------------------
For gegner.Tgegner=Each Tgegner
   If Not ImagesCollide(bild2,500,400,0,bild3,gegner\x,gegner\y,0)
      If gegner\sterb=0
         DrawImage bild3,gegner\x,gegner\y,0
      EndIf
   Else
   gegneranzahl=gegneranzahl-1
   Delete gegner.Tgegner
   EndIf
   If MilliSecs()>gegner\sterbtimer+3500 Then
      If gegner\sterb=0
         looser=looser+1
         Delete gegner.Tgegner
      EndIf
   EndIf
Next
For gegner.Tgegner=Each Tgegner
If ImageRectCollide(bild3,gegner\x,gegner\y,0,mausx-1,mausy-1,2,2)
   If mh=1
      gegner\sterb=1
   EndIf
EndIf
If gegner\sterb=1 Then
   gegner\sterb2=gegner\sterb2+1
   DrawImage bild3,gegner\x,gegner\y,1
EndIf
If gegner\sterb2>10 Then
gegneranzahl=gegneranzahl-1
kills=kills+1
Delete gegner.Tgegner
EndIf
Next   

;smileybild------------------------------------------------------------
   DrawImage bild,100,100,framenummer
   framenummer=framenummer+1
   If framenummer>5 Then framenummer=0

;schuss----------------------------------------------------------------
   If mh=1 Then
      schuss.Tschuss =New Tschuss
      schuss\x=mausx
      schuss\y=mausy
      schuss\fortsch=1
      schuss\doe=1
   EndIf
For schuss.Tschuss =Each Tschuss
   If schuss\doe=1
         Color 255,0,0
      Oval schuss\x-schuss\fortsch,schuss\y-schuss\fortsch,schuss\fortsch*2,schuss\fortsch*2
      schuss\fortsch=schuss\fortsch+1
      If schuss\fortsch>20 Then Delete schuss.Tschuss
   EndIf

Next

;mauszeug--------------------------------------------------------------
mausx=MouseX()
mausy=MouseY()
Color 0,0,0
Line mausx -10,mausy,mausx+10,mausy
Line mausx,mausy -10,mausx,mausy+10
Oval mausx-8,mausy-8,16,16,0


;statustexte-----------------------------------------------------------------
Text 1,1,"mausx: " +mausx
Text 1,20,"mausy: " +mausy
Text 1,40,"framenummer: " +framenummer
Text 1,60,"gegneranzahl: " +gegneranzahl
Text 1,80,"looser: " +looser
Text 1,100,"kills: " +kills

   
Flip
Wend
End


irgendwie bekomm ich da immer nach genau 7 erschaffenen gegnern nen illegal memory adress

ergibt für mich keinen sinn warum,...
wo ca könnte der fehler herkommen?

Pdd

BeitragDi, Dez 12, 2006 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Schonmal Den Debugger angeworfen? Razz
Lieber Apfel als Birne.
 

da_poller

BeitragDi, Dez 12, 2006 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm wenner an is heißts objact does not exist.... komisch komisch kapier den fehler irgendwie nicht wo der sein könnte..


edit


der fehler kommt in folgender zeile:

Code: [AUSKLAPPEN]
If MilliSecs()>gegner\sterbtimer+3500 Then

Pdd

BeitragDi, Dez 12, 2006 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann hast du wahrscheinlich das Tyoe gelöscht, und jetzt versucht er drauf zuzugreifen Wink
Lieber Apfel als Birne.
 

da_poller

BeitragDi, Dez 12, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
aber wo wäre das komm da irgendwie nicht drauf...

irgendwie spinnt der type seit ich die gegner per zeit erschaffe



edit:

gelöst!!!

musste die abfrage für das töten des gegners(wenn er 3.5 sec existiert) in ne eigene for next schleife packen
  • Zuletzt bearbeitet von da_poller am Di, Dez 12, 2006 21:32, insgesamt einmal bearbeitet

Pdd

BeitragDi, Dez 12, 2006 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For gegner.Tgegner=Each Tgegner
   If Not ImagesCollide(bild2,500,400,0,bild3,gegner\x,gegner\y,0)
      If gegner\sterb=0
         DrawImage bild3,gegner\x,gegner\y,0
      EndIf
   Else
   gegneranzahl=gegneranzahl-1
   Delete gegner.Tgegner ; <- hier wird er gelöscht!
   EndIf
   If MilliSecs()>gegner\sterbtimer+3500 Then ; <- hier versuchts du noch auf eine Eigenschaft zuzugreifen!
      If gegner\sterb=0
         looser=looser+1
         Delete gegner.Tgegner
      EndIf
   EndIf
Next
Lieber Apfel als Birne.
 

da_poller

BeitragDi, Dez 12, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
jup hab ich in dem moment wo dus getippt hast gesehen danke für die hilfe siehe über dir da steht wie ich gelöst hab(fals es interessiert ^^)

danke für die hilfe!!
 

JanK

BeitragDi, Dez 12, 2006 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin der Meinung, dass es ein einfaches Exit nach dem Delete auch getan hätte.
Sry wenn ich Falsch liege Smile
Ich habe keine Zeit, mich zu beeilen.
The Pollux Conflict || The Pollux Renegades || Lipstick-live.de

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group