SpriteCollision Fadenkreuz (Update!!!)
Verfasst: 10.05.2005 16:45
So hier mal die wichtigsten Teile aus meinem Code:
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?
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
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?