Abfragen ob Maus sich auf einem Sprite befindet?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Abfragen ob Maus sich auf einem Sprite befindet?

Beitrag 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
Ich benutze PureBasic 4.0.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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.
Ich benutze PureBasic 4.0.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

niemand ne idee wieso mein Code nicht funktioniert?
Ich benutze PureBasic 4.0.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Listen sind nicht mehr global. So geht es unter 4 :

Code: Alles auswählen

Global NewList Ziel.Ziel() 
Zuletzt geändert von edel am 08.06.2007 15:14, insgesamt 1-mal geändert.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Wie wärs mit Global List?


//Edit:

War zu lansam :cry: :mrgreen:
Antworten