SpriteCollision Fadenkreuz (Update!!!)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

SpriteCollision Fadenkreuz (Update!!!)

Beitrag von Gamer »

So hier mal die wichtigsten Teile aus meinem Code:

Code: Alles auswählen

If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse()=0 Or InitSound()=0:End:EndIf
If OpenScreen(1024,768,16,"")=0:End:EndIf

UsePNGImageDecoder()

Global enemyDelay.l  
Global enemySetDelay.l 
Global score.l 

enemySetDelay = 100  

Enumeration    
  #Sprite_Enemy   
  #Sprite_Fadenkreuz  
EndEnumeration

Structure enemy    
  x.l          
  y.l
  speedX.l
  richtung.l
EndStructure 
NewList enemy.enemy()  

Procedure AddEnemy(x,y,speedX,richtung)
  AddElement(enemy())  
  enemy()\x = x
  enemy()\y = y
  enemy()\speedX = speedX
  enemy()\richtung = richtung
EndProcedure

LoadSprite(#Sprite_Enemy,   "gegner.png")
LoadSprite(#Sprite_Fadenkreuz,"kreuz.png")

Repeat
     ExamineKeyboard():ExamineMouse()
     ClearScreen(0,0,0)
     Gosub enemy
     FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End

enemy:

  DisplayTransparentSprite(#Sprite_Fadenkreuz,MouseX(),MouseY())

  If SpriteCollision(#Sprite_Fadenkreuz, MouseX(), MouseY(), #Sprite_Enemy, enemy()\x, enemy()\y)
  ClearScreen(255,255,255)
  EndIf

  If enemyDelay = 0
  haha = Random(1)
  If haha=1:startwert=0:Else:startwert=1024:EndIf
    AddEnemy(startwert,Random(768),-2-Random(1),haha)
    enemyDelay = enemySetDelay
  Else
    enemyDelay - 1
  EndIf

  ForEach enemy()
    If enemy()\x<0-SpriteWidth(#Sprite_Enemy) And enemy()\richtung=1: DeleteElement(enemy()) : EndIf
    If enemy()\x>1024+SpriteWidth(#Sprite_Enemy) And enemy()\richtung=0: DeleteElement(enemy()) : EndIf
  Next

  ForEach enemy()
    DisplayTransparentSprite(#Sprite_Enemy, enemy()\x, enemy()\y)
    If enemy()\richtung=0:enemy()\x + enemy()\speedX:Else:enemy()\x - enemy()\speedX:EndIf
  Next

Return
Problem ist die Kollisionserkennung. Ich habe mal testweise immer einen weißen Screen eingebaut wenn die Maus einen Gegner streift.

Allerdings funktioniert dies nur jeweils immer 100 Pixel links + rechts vom Rand, in der Mitte und am Ende des Enemyflugs blitzt der weiße Screen nicht mehr auf...

Wo liegt der Fehler?
Zuletzt geändert von Gamer am 10.05.2005 20:22, insgesamt 1-mal geändert.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

hallo

mach mit spritepixelcollision

ist zwar langsamer aber genauer :allright:


also:

Code: Alles auswählen

If SpritePixelCollision(#Sprite_Fadenkreuz, MouseX(), MouseY(), #Sprite_Enemy, enemy()\x, enemy()\y) ...
-.-"
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag von Gamer »

Was ist daran "genauer"? Ich merk keinen Unterschied. Ich bräuchte lediglich eine Abfrage wie SpriteCollision(#Sprite_Fadenkreuz,#Sprite_Enemy)
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

bei spritepixelcollision werden alle transparennten pixel eines bildes ignorrirt.

ich verstehe deine frage nicht ganz, aber das währe meiner meinung nach das beste
-.-"
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag von Gamer »

So hab oben nochmal mehr Code dazu gepostet...
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Hallo Gamer,

merkwürdig, sieht auf den ersten Blick logisch aus,
aber funktioniert nur teilweise. Der Bildschirm blitzt
bei mir auch nur auf wenn die Objekte am Rand
mit diesem Fadenkreuz berührt werden.

:roll:
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Hab mal schnell den Code überflogen: Du müsstest alle enemy() überprüfen, nicht nur einen.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten