Seite 1 von 1

Abfragen ob Maus sich auf einem Sprite befindet?

Verfasst: 05.06.2007 19:35
von Dark Skillu
Hallo ich habe mir das Game im PB-Tutorial angeschaut und mal nachprogrammiert, die Abfrage ob sich die Maus über dem Sprite (Ziel) befindet habe ich einfach nur kopiert und an meine Variablen angepasst, wenn ich jetzt auf die box "schieße" passiert nix anstatt auf der linken seite neu zu erscheinen wie ich mir es vorgestellt habe, wie schaffe ich es denn, dass es mehrere Ziele gleichzeitig gibt? Für den Code braucht man zwei Bilder die man aber einfach beliebig ersetzen kannn, nen einfaches kreuz und nen background am besten nicht rot ^^

Hier der Code dazu:

Code: Alles auswählen

UseJPEGImageDecoder()
InitSprite()
InitMouse()
InitKeyboard()
If OpenScreen(640,480,32,"Game")
 CreateSprite(0,20,20)
EndIf

StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20,RGB(105, 0, 0))
StopDrawing()

LoadSprite(2,"kreuz.bmp",0)
LoadSprite(1,"background.jpg",0)

boxx = -200
boxy = 50
speed = 1

Repeat

punkte = 0

boxx = boxx + Speed

TransparentSpriteColor(2,255+256*0+256*256*255)

ExamineMouse()
ExamineKeyboard()

Mousex = MouseX()
Mousey = MouseY()

DisplaySprite(1,0,0)
DisplaySprite(0,boxx,boxy)
DisplayTransparentSprite(2,Mousex, Mousey)

FlipBuffers()

If MouseButton(1) And Mousex > boxx And Mousex < boxx + 20 And Mousey > boxy And Mousey  < boxy + 20
 boxx = -40
 boxy = Random(480)
 speed = speed + 1
 punkte +1
 
EndIf

Until KeyboardPushed(1) Or boxx > 480
CloseScreen()
MessageRequester("Game Over", "Du hast " + Str(Punkte) + " Punkte erreicht",0)
Vielen dank im Voraus für eure Hilfe

MfG DarkSkillu

Verfasst: 06.06.2007 00:02
von STARGÅTE
Ich wüsste nicht was an der Mausabfrage falsch wäre, aber hier ein Code für mehrere Ziele

mehrere Ziele kannst du mit Hilfe von einer LinkedList "erschaffen" :

Code: Alles auswählen

UseJPEGImageDecoder() 
InitSprite() 
InitMouse() 
InitKeyboard() 
If OpenScreen(640,480,32,"Game") 
 CreateSprite(0,20,20) 
EndIf 

;LINKLIST
Structure Ziel
 x.l
 y.l
EndStructure
NewList Ziel.Ziel()  ;<< Die Liste der Ziele
Procedure NeuesZiel(x,y)
 AddElement(Ziel())
 Ziel()\x = x
 Ziel()\y = y
EndProcedure


StartDrawing(SpriteOutput(0)) 
        Box(0, 0, 20, 20,RGB(105, 0, 0)) 
StopDrawing() 

LoadSprite(2,"kreuz.bmp",0) 
LoadSprite(1,"background.jpg",0) 

AnzahlDerZiele = 4

For n = 1 to AnzahlDerZiele
 NeuesZiel(-200, Random(480))
Next n

speed = 1 
punkte = 0 

Repeat 


TransparentSpriteColor(2,255+256*0+256*256*255) 

ExamineMouse() 
ExamineKeyboard() 

Mousex = MouseX() 
Mousey = MouseY() 

DisplaySprite(1,0,0) 

; Ziele Bearbeiten
ResetList(Ziel())
While NextElement(Ziel())
 Ziel()\x = Ziel()\x + Speed 
 DisplaySprite(0,Ziel()\x,Ziel()\y) 
 If Ziel()\x > 480 : ENDE = 1 : EndIf
Wend

DisplayTransparentSprite(2,Mousex, Mousey) 

FlipBuffers() 

ResetList(Ziel())
While NextElement(Ziel())
 If MouseButton(1)
  If Mousex > Ziel()\x And Mousex < Ziel()\x+20 And Mousey > Ziel()\y And Mousey  < Ziel()\y+20 
   Ziel()\x = -40 
   Ziel()\y = Random(480) 
   speed = speed + 1 
   punkte +1 
  EndIf 
 EndIf
Wend

Until KeyboardPushed(1) Or ENDE
CloseScreen() 
MessageRequester("Game Over", "Du hast " + Str(Punkte) + " Punkte erreicht",0)

Verfasst: 06.06.2007 17:20
von Dark Skillu
Kann leider deinen Code nicht benutzen da ich PB 4.0 habe :( und nicht die Erfahrung habe deinen umzuschreiben, bei mir kommt nämlich nen Error liegt wahrshceinlich daran, dass du PB 3.3 oder so benutzst.

"Ziel() ist not a functiuon, linked list, array or makro" oder so ähnlich war der error.

Verfasst: 08.06.2007 14:32
von Dark Skillu
niemand ne idee wieso mein Code nicht funktioniert?

Verfasst: 08.06.2007 15:07
von edel
Listen sind nicht mehr global. So geht es unter 4 :

Code: Alles auswählen

Global NewList Ziel.Ziel() 

Verfasst: 08.06.2007 15:08
von Andreas_S
Wie wärs mit Global List?


//Edit:

War zu lansam :cry: :mrgreen: