Maus Bestätigung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Maus Bestätigung

Beitrag von Reever »

Wie schaffe ich es zum Beispiel in einem Menü mit einem Openscreen()
Befehl, verschiedene Aktionen bei einem Mausklick an verschiedenen Stellen zu machen?
Die WindoweventID geht ja hier nicht, ist ja kein Window, ich brauche einfach etwas was an einer Bestimmten Stelle mit einem Mausklick eine Aktion ausführt so ne Art verschiedene Bereichsfelder eben <)
Versteht ja sicher jeder, schreibe schon wieder zuviel drumherum und das um 12:15 Nachts :mrgreen:

Danke schonmal im voraus :D
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Beitrag von Reever »

Schlecht erklärt ich meine ein selbstgemachtes SpriteMenü auf einem Screen, so, besser :allright:
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Du könntest für jeden Button eine Sprite erstellen, die als erstes
gerendert wird, damit diese später durch andere Sprites über-
malt wird. Die IDs der Sprites speicherst du dann in einer Linked
List. Dann gehst du einfach mit allen Sprites in der LinkedList durch
ob diese mit der Maussprite kolidiert. Wenn dies der Fall ist, über-
prüfst du ob die Maus gedrückt wurde und schon haben wir ein
feines System um zu prüfen ob und welcher Button gedrückt wurde.
Bild
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Beitrag von Reever »

/:->
Das Prinzip habe ich schon verstanden, bin nur relativer Anfänger auf dem Gebiet, also wär mir ein kleiner Ausschnitt, bei dem Verknüpfen von Maus und der Linked List und der Erstellung der Liste ne große Hilfe :lol:

Danke für die Mühen :mrgreen:
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Beitrag von Reever »

Soweit ist es jetzt geworden ; das Beispiel

If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse()=0 Or InitSound()=0
MessageRequester("Fehler","Fehler beim laden möglicherweise zu fehlende DirectX",0)
EndIf

If OpenScreen(800,600,32,"Rick-Undeath-Reloaded")

LoadSprite(1,"Cursor",0)
LoadSprite(2,"Datei1",0)
LoadSprite(3,"Datei2",0)
LoadSprite(4,"Datei3",0)
LoadSprite(5,"Datei4",0)
LoadJPEGSprite(6,"Button1",#PB_Sprite_Texture)
LoadJPEGSprite(7,"Button2",#PB_Sprite_Texture)
LoadJPEGSprite(8,"Button3",#PB_Sprite_Texture)
LoadJPEGSprite(9,"Button4",#PB_Sprite_Texture)

Repeat

FlipBuffers()
DisplaySprite(0,0,0)

D=282
W=400

DisplaySprite(2,282,400) ;load
DisplaySprite(3,480,400) ;exit
DisplaySprite(4,382,400) ;optionen
DisplaySprite(5,182,400) ;Start

DisplayAlphaSprite(6,D,W);loadButton
DisplayAlphaSprite(7,480,400);exitButton
DisplaySprite(8,382,400);optionenButton
DisplaySprite(9,182,400);StartButton


;Maus
ExamineMouse()
ExamineKeyboard()
x=MouseX()
y=MouseY()
;y+MouseWheel()*10
DisplaySprite(1, x-SpriteWidth(1)/28,y-SpriteHeight(1)/28 )
SetMouseSpeed= x*50 | y*50


If SetMouseSpeed
EndIf

ActualX=x
ActualY=y

ActualXY= ActualX | ActualY ;Die Maus
SpriteXY= D | W | SpriteHeight(13) | SpriteWidth(13) ;Das Sprite

If ActualX
Debug ActualX ;zur Aktuellen Mausangabe einfache Selbsthilfe ;)

EndIf

If ActualY
Debug ActualY ;zur Aktuellen Mausangabe einfache Selbsthilfe ;)

EndIf


If ActualXY = SpriteXY And MouseButton(1)

StartDrawing(ScreenOutput())
Locate(100,200)
DrawText("Hi")
StopDrawing()
EndIf


If ActualXY > SpriteXY
StartDrawing(ScreenOutput())
Locate(0,200)
DrawText("Hex")
StopDrawing()


EndIf
Until KeyboardPushed(#PB_Key_Escape)
EndIf
End



Also soweit stimmt es jetzt, dass er immer, wenn er den Bereich erreicht und ich mit Button(1) klicke, er den Text Hi anzeigt, nur das Problem ist, dass er dies auf der gesamten X-Achse beginnend von dem D Wert tut und komischerweise an bestimmten Stellen nicht an anderen ja auch auf der Y-Achse teilweise, also gut wäre vielleicht ein Beispiel, wie man einen Bereich definiert, um dann abzufragen ob das nächste Bereichsfeld beginnt, dass habe ich glaube ich hier schlecht gelöst /:-> :mrgreen:

Thank u very much for ure efforts :allright:
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Beitrag von Reever »

Also die Textbuttons werden unter die eigentlichen Bilder gelegt und dann abgefragt, nur das mit dem Bereich kriege ich nicht hin :(
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

Structure sButtons
    btnSpriteID.l
    btnXPos.l
    btnYPos.l
EndStructure

NewList Buttons.sButtons()

Global sprMouse.l

Procedure NewButton(strTitle.s, lngXPos.l, lngYPos.l, lngWidth.l, lngHeight.l)
    DefType.l lngSpriteID
    
    lngSpriteID = CreateSprite(#PB_Any, lngWidth, lngHeight)
    If StartDrawing(SpriteOutput(lngSpriteID))
        Box(0, 0, lngWidth, lngHeight, RGB(192, 192, 192))
        
        DrawingMode(1)
        Locate(4, (lngHeight-16)/2)
        DrawText(strTitle)
        
        ;*---
        StopDrawing()
    EndIf
    
    LastElement(Buttons()): AddElement(Buttons())
    Buttons()\btnSpriteID = lngSpriteID
    Buttons()\btnXPos = lngXPos
    Buttons()\btnYPos = lngYPos
EndProcedure

If OpenScreen(1024,768, 32, "Buttons")
    sprMouse = CreateSprite(#PB_Any, 16, 16)
    If StartDrawing(SpriteOutput(sprMouse))
        Box(0, 0, 16, 15, RGB(128, 0, 0))
        ;*---
        StopDrawing()
    EndIf
    
    NewButton("Test1", 5,  5, 50, 25)
    NewButton("Test2", 5, 40, 50, 25)
    
    Repeat 
        ClearScreen(0, 0, 0)
        ExamineKeyboard()
        ExamineMouse()
        ;*---
        
        ForEach Buttons()
            If SpriteCollision(sprMouse, MouseX(), MouseY(), Buttons()\btnSpriteID, Buttons()\btnXPos , Buttons()\btnYPos)
                DisplaySprite(Buttons()\btnSpriteID, Buttons()\btnXPos , Buttons()\btnYPos) 
            EndIf
        Next
        DisplaySprite(sprMouse, MouseX(), MouseY())
        ;*---
        FlipBuffers() 
    Until KeyboardReleased(#PB_Key_Escape)
EndIf
Denke, dass man dies so stehen lassen kann.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ich denke die Initialisierungen sollten auch überprüft werden, also in etwa so:

Code: Alles auswählen

If InitSprite() = #False Or InitKeyboard() = #False Or InitMouse() = #False : End : EndIf
Zuletzt geändert von ts-soft am 17.08.2005 01:31, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Man kann auch nur Initsprite überprüfen. Wenn dies gelungen ist,
dann müsste Keyboard und Mouse ebenfalls ladbar sein, oder?
Bild
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Beitrag von Reever »

Jo danke läuft soweit :lol:
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Antworten