Problem mit collide [gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

damagerII

Betreff: Problem mit collide [gelöst]

BeitragMi, Dez 02, 2009 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ich mache für ein Projekt einen Space shooter. Nun habe ich folgendes Problem: Wenn ich auf den gegner schieße und diesen treffe möchte ich das dieser gelöscht wird. Nun weiß ich nicht genau wie das geht... ich habe es schon mal ausprobiert (ganz unten im code) aber anscheinend ist das falsch...
mfg damagerII

Code: [AUSKLAPPEN]
Graphics 1000,800,16,2
SetBuffer BackBuffer()

Global Hero  = LoadImage("shuttle.bmp")
Global laser = LoadImage("shot2.bmp")
Global gegner = LoadImage("hero2.bmp")
MaskImage hero,0,0,0
MaskImage laser,255,255,255
MaskImage gegner,0,0,0

Global hero_x = 500, hero_y = 600, shot_counter = 0 
Global gegner_x = 500, gegner_y = 50
Global time1
Global time2


Type shot         
 Field shot_x     
 Field shot_y     
End Type

time1=MilliSecs()

Repeat
Cls

time2=MilliSecs()
 
 moveHero()
 createLaser()

Flip
Until KeyHit(1)   
Function moveHero()
 
   If KeyDown(203) Then hero_x = hero_x - 3
   If KeyDown(205) Then hero_x = hero_x +3

  If KeyDown(200) Then hero_Y = hero_y -3
  If KeyDown(208) Then hero_y = hero_y +3

 DrawImage hero, hero_x, hero_y

End Function

Function createlaser()

   If KeyHit(57) Then
        shot_counter = shot_counter +1
   End If

    If shot_counter = 1 Then
     
       info.shot = New shot           
         info\shot_x = hero_x  +40     
         info\shot_y = hero_y         
        shot_counter = 0             
     End If


 For info.shot = Each shot                             
     info\shot_y = info\shot_y -8                       
     DrawImage laser,info\shot_x,info\shot_y           
  Next

 DrawImage gegner, gegner_x, gegner_y

End Function

Function collidegegner()

   For info.shot = Each shot
   If ImagesCollide(gegner, gegner_x, gegner_y, 0, laser, info/shot_x, info/shot_y, 0)
   Then Delete gegner
   EndIf

End Function
  • Zuletzt bearbeitet von damagerII am Fr, Dez 04, 2009 15:52, insgesamt 2-mal bearbeitet

count-doku

BeitragMi, Dez 02, 2009 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

1.Nimm lieber ne andere Auflösung , könnte auf anderen PC´s Probleme geben.

2.Timer und Flip 0; Siehe:Hurra, 100% Auslastung

3.Du musst ja collidegegner() auch noch irgendwo aufrufen. Am besten in der Hauptschleife.

So, ich glaube das sollte dir weiterhelfen.



Mfg,
count-doku
 

damagerII

BeitragMi, Dez 02, 2009 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke Smile ich werde es mal so machen

Nicdel

BeitragMi, Dez 02, 2009 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Und vermeide ImagesCollide, siehe hier: https://www.blitzforum.de/foru...hp?t=27025
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

damagerII

BeitragMi, Dez 02, 2009 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
count-doku hat Folgendes geschrieben:
Hi,

3.Du musst ja collidegegner() auch noch irgendwo aufrufen. Am besten in der Hauptschleife.

So, ich glaube das sollte dir weiterhelfen.

Mfg,
count-doku


Da kommt dann die Fehlermeldung Expecting 'EndIf'
was hat das zu bedeuten? und wie löse ich das problem??

count-doku

BeitragMi, Dez 02, 2009 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann fehlt in deiner Funktion warscheinlich ein End If.
Ah nein, ich sehe grad du hasst ein Next vergessen.
Code: [AUSKLAPPEN]
Function collidegegner()

   For info.shot = Each shot;Hier beginnst du die For Schleife
     If ImagesCollide(gegner, gegner_x, gegner_y, 0, laser, info/shot_x, info/shot_y, 0);Hier If
       Then Delete gegner
     EndIf;Hier end if
   Next;Das fehlte.
End Function



Mfg,
count-doku
 

damagerII

BeitragMi, Dez 02, 2009 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke,
das Next hat wirklich gefehlt Smile und ich habe es auch hinzugefügt aber irgentwie schreibt das Programm mir immernoch die Fehlermeldung Expecting 'EndIf' (und markiert dabei die Zeile mit "Then delete gegner")... Sad Was hat das zu bedeuten???

count-doku

BeitragMi, Dez 02, 2009 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, hab ich glatt vergessen.
Das Then muss hinter die Bedingung.
Code: [AUSKLAPPEN]
Function collidegegner()
   For info.shot = Each shot
     If ImagesCollide(gegner, gegner_x, gegner_y, 0, laser, info/shot_x, info/shot_y, 0) Then
       Delete gegner
     EndIf
   Next
End Function
 

damagerII

BeitragMi, Dez 02, 2009 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Sad hab es jetzt hinter die bedingung geschrieben:
Code: [AUSKLAPPEN]
Function collidegegner()

    For info.shot = Each shot

   If ImagesCollide(gegner, gegner_x, gegner_y, 0, laser, info/shot_x, info/shot_y, 0) Then
   Delete gegner
   EndIf
   
   Next

End Function

aber jetzt kommt eine neue fehlermeldung: Arithmetic operator cannot be applied to custom type objects
und ehrlich gesagt habe ich keine Ahnung was diese Fehlermeldung bedeutet...

Eingeproggt

BeitragMi, Dez 02, 2009 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest dir noch n Type-Tut zu Gemüte führen...
Der Zugriff auf Type-"Fields" erfolgt nicht durch einen Schrägstrich (dieser bedeutet dividieren -> "Arithmetic Operator" Wink ) sondern mit einem Backslash, zu finden auf der Taste wo \ und ? drauf sind Wink
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

damagerII

BeitragMi, Dez 02, 2009 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hey das war das problem Very Happy
jetzt klappt's
danke an euch beide Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group