Problem mit Mini-Spaceshooter

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

captain kwirkby

Betreff: Problem mit Mini-Spaceshooter

BeitragMo, Jun 30, 2008 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi! Ich hab ein Problem, ich wolte nämlich einen Mini-Spaceshooter machen(nur ganz einfach, als Übung) und jetzt zeigt er mir alle 20 Sekunden ein "Object does not exist" bei der Zeile "If ImagesOverlap(sh,s\x,s\y..."
Könnt ihr mir helfen?
Code: [AUSKLAPPEN]
Graphics 640,480,32,2
SeedRnd MilliSecs()
SetBuffer BackBuffer()
Global you = LoadAnimImage("you.bmp",100,50,0,2)
Global en = LoadImage("enemy.bmp")
Global sh = LoadImage("shot.bmp")
Global explo = LoadImage("explo.bmp")
MaskImage you,255,255,255
MaskImage en,255,255,255
MaskImage sh,255,255,255
MaskImage explo,255,255,255
MidHandle sh
MidHandle explo
MidHandle you
MidHandle en
Global x = 50
Global y = 240
Global health = 10
Global timer = CreateTimer(30)

Function explosion(x,y)
DrawImage explo,x,y
End Function

Type enemy
Field x
Field y
End Type

Type shot
Field x
Field y
End Type

Function CreateEnemy()
e.enemy = New enemy
e\x = 640
e\y = Rand(50,600)
End Function

Function CreateShot()
s.shot = New Shot
s\x = x+25
s\y = y-5
End Function

While Not KeyHit(1)
WaitTimer TIMER
Cls


If KeyDown(200) And y>25 Then y = y - 5
If KeyDown(208) And y<465 Then y = y + 5
If KeyHit(57) Then CreateShot()



booley = Rand(49)
If booley = 7 Then CreateEnemy()
For e.enemy = Each enemy
e\x = e\x - 5
DrawImage en,e\x,e\y
If e\x <= 0 Then Delete e
;-------------------
For s.shot = Each shot
s\x = s\x + 5
DrawImage sh,s\x,s\y
If s\x > 640 Then Delete s
If ImagesOverlap(sh,s\x,s\y,en,e\x,e\y) Then
explosion(e\x,e\y)
Delete e
Delete s
End If
Next
;-------------
Next
If nr = 0 Then nr = 1 Else nr = 0

DrawImage you,x,y,nr
Color 255,0,0
Rect 5,5,health * 10,10

Flip

Wend
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

BladeRunner

Moderator

BeitragMo, Jun 30, 2008 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du prüfst auf e obwohl du es vorher potentiell löschst Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

captain kwirkby

BeitragMo, Jun 30, 2008 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke das klappt jetzt Very Happy
Aber jetzt hab ich das Problem dass die Schüsse immer schneller werden Confused
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

Firstdeathmaker

BeitragMo, Jun 30, 2008 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Poste doch noch einmal deinen aktuellen code...
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

captain kwirkby

BeitragMo, Jun 30, 2008 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
okay hier ist er:

Code: [AUSKLAPPEN]
Graphics 640,480,32,2
SeedRnd MilliSecs()
SetBuffer BackBuffer()
Global you = LoadAnimImage("you.bmp",100,50,0,2)
Global en = LoadImage("enemy.bmp")
Global sh = LoadImage("shot.bmp")
Global explo = LoadImage("explo.bmp")
MaskImage you,255,255,255
MaskImage en,255,255,255
MaskImage sh,255,255,255
MaskImage explo,255,255,255
MidHandle sh
MidHandle explo
MidHandle you
MidHandle en
Global x = 50
Global y = 240
Global health = 10
Global timer = CreateTimer(30)

Function explosion(x,y)
DrawImage explo,x,y
End Function

Type enemy
Field x
Field y
End Type

Type shot
Field x
Field y
End Type

Function CreateEnemy()
e.enemy = New enemy
e\x = 640
e\y = Rand(50,400)
End Function

Function CreateShot()
s.shot = New Shot
s\x = x+25
s\y = y-5
End Function

While Not KeyHit(1)
WaitTimer TIMER
Cls


If KeyDown(200) And y>25 Then y = y - 5
If KeyDown(208) And y<465 Then y = y + 5
If KeyHit(57) Then CreateShot()



booley = Rand(49)
If booley = 7 Then CreateEnemy()
For e.enemy = Each enemy
e\x = e\x - 5
DrawImage en,e\x,e\y
;-------------------
For s.shot = Each shot
s\x = s\x + 5
DrawImage sh,s\x,s\y
If ImagesOverlap(sh,s\x,s\y,en,e\x,e\y) Then
explosion(e\x,e\y)
Delete e
Delete s
End If
Next
;-------------
Next
If nr = 0 Then nr = 1 Else nr = 0

DrawImage you,x,y,nr
Color 255,0,0
Rect 5,5,health * 10,10

Flip

Wend
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

Firstdeathmaker

BeitragMo, Jun 30, 2008 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht hast du auch noch die Bilder? So beim durchsehen kann ich nix entdecken, hab aber keine Lust imagestrips zu basteln um das testen zu können...
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

captain kwirkby

BeitragMo, Jun 30, 2008 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitteschön Wink
http://www.file-upload.net/dow...a.zip.html
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

Firstdeathmaker

BeitragMo, Jun 30, 2008 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast da mit den Schleifen einiges im argen liegen. Die Schüsse werden bei mehr Gegnern schneller, weil sie dann öfter geupdatet werden.

Lager die Bewegung der Schüsse und der Gegner in zwei unterschiedliche Schleifen aus, und mach nachher eine seperate for-Schleife über die Schüsse und Gegner in der du auf Kollision prüfst:

Code: [AUSKLAPPEN]
Graphics 640,480,32,2
SeedRnd MilliSecs()
SetBuffer BackBuffer()
Global you = LoadAnimImage("you.bmp",100,50,0,2)
Global en = LoadImage("enemy.bmp")
Global sh = LoadImage("shot.bmp")
Global explo = LoadImage("explo.bmp")
MaskImage you,255,255,255
MaskImage en,255,255,255
MaskImage sh,255,255,255
MaskImage explo,255,255,255
MidHandle sh
MidHandle explo
MidHandle you
MidHandle en
Global x = 50
Global y = 240
Global health = 10
Global timer = CreateTimer(30)

Function explosion(x,y)
DrawImage explo,x,y
End Function

Type enemy
Field x
Field y
End Type

Type shot
Field x
Field y
End Type

Function CreateEnemy()
e.enemy = New enemy
e\x = 640
e\y = Rand(50,600)
End Function

Function CreateShot()
s.shot = New Shot
s\x = x+25
s\y = y-5
End Function

While Not KeyHit(1)   
   Cls

   If KeyDown(200) And y>25 Then y = y - 5
   If KeyDown(208) And y<465 Then y = y + 5
   If KeyHit(57) Then CreateShot()
   
   For s.shot = Each shot
      s\x = s\x + 5
      DrawImage sh,s\x,s\y
   Next
   
   booley = Rand(49)
   If booley = 7 Then CreateEnemy()
   For e.enemy = Each enemy
      e\x = e\x - 5
      DrawImage en,e\x,e\y
      
      ;-------------------
      For s.shot = Each shot
         If ImagesOverlap(sh,s\x,s\y,en,e\x,e\y) Then
            explosion(e\x,e\y)
            Delete e
            Delete s
            Exit
         End If
      Next
      ;-------------
   Next
   
   If nr = 0 Then nr = 1 Else nr = 0

   DrawImage you,x,y,nr
   Color 255,0,0
   Rect 5,5,health * 10,10
   
   Flip
   WaitTimer timer
Wend
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

captain kwirkby

BeitragMo, Jun 30, 2008 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke hat funktioniert und alles läuft soweit bugfrei Very Happy
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group