Seite 1 von 1

Maus Bestätigung

Verfasst: 16.08.2005 00:22
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

Verfasst: 16.08.2005 00:23
von Reever
Schlecht erklärt ich meine ein selbstgemachtes SpriteMenü auf einem Screen, so, besser :allright:

Verfasst: 16.08.2005 01:17
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.

Verfasst: 16.08.2005 06:28
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:

Verfasst: 17.08.2005 00:03
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:

Verfasst: 17.08.2005 00:05
von Reever
Also die Textbuttons werden unter die eigentlichen Bilder gelegt und dann abgefragt, nur das mit dem Bereich kriege ich nicht hin :(

Verfasst: 17.08.2005 00:36
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.

Verfasst: 17.08.2005 00:45
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

Verfasst: 17.08.2005 00:58
von MVXA
Man kann auch nur Initsprite überprüfen. Wenn dies gelungen ist,
dann müsste Keyboard und Mouse ebenfalls ladbar sein, oder?

Verfasst: 17.08.2005 02:15
von Reever
Jo danke läuft soweit :lol: