Image Buttons unter Draw3D

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

funkmaster5000

Betreff: Image Buttons unter Draw3D

BeitragMo, Dez 03, 2012 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Community!

Ich befasse mich jetzt so langsam mit Draw3D, es ist wirklich eine tolle Erweiterung. Derzeit versuche ich etwas (vermeintlich) ganz einfaches: ein Bild auf dem Screen soll als Button dienen, und zwar nicht für eine GUI (dafür gibts ja die SGG) sondern einfach, um einen Infotext darüber anzuzeigen, sobald der User darüberfährt (oder klickt). Ich habe mir die Mausbefehle angesehen und ein bisschen experimentiert, um zu sehen, was sie bewirken und habe mir auch das Beispiel "Stuff, Image Buttons.bb" angesehen. Dem entnehme ich, dass folgende Befehle existieren:

MouseOver3D
MouseDown3D
MousePit3D
MouseHit3D
MouseTest3D

Dazu habe ich 2 Fragen:
Was macht MousePit3D?

Auf die Beispiel.bb bezogen:
Am unteren Bildschirmrand wird je nach Button eine Zahl zurückgeliefert, zusammen mit "Test", also Test 1, Test 2 usw. Wie finde ich heraus, über welchem Bild sich die Maus befindet? Liefert ein Befehl ein Handle zurück? Oder muss ich die Koordinaten checken? Es muss etwas mit dem Befehl MouseTest3D zu tun haben, aber in meinem Versuch bleibt der Wert 0, auch, wenn ich mich über einem Button befinde. Hat das etwas mit dem "Glow" zu tun, der dem Button in dem Beispiel zugewiesen wird?

Danke im Voraus. Hier ist nochmal mein Beispiel (nur als Experiment), bei dem mir auch klar ist, dass man keine 2D Befehle mit 3D Befehlen mischen soll, aber ist ja nur zum ausprobieren.

Code: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

Local Camera = CreateCamera()
Include "C:\Programme\Blitz3D\userlibs\Includes\Draw3D2.bb"
DrawInit3D(Camera)

planet1 = LoadImage3D ("gfx\planet1.png",4)

While Not KeyHit(1)
   Cls
   DrawImage3D(planet1,10,10)
   RenderWorld
   Clear3D()
   Text 0,0,MouseOver3D
   Text 0,10,MouseDown3D
   Text 0,20,MouseTest3D
   Flip 0
Wend

End

Tankbuster

BeitragMo, Dez 03, 2012 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
versuch das mal und klick auf das Bild Wink

Code: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

Local Camera = CreateCamera()
Include "C:\Programme\Blitz3D\userlibs\Includes\Draw3D2.bb"
DrawInit3D(Camera)

planet1 = LoadImage3D ("gfx\planet1.png",4)

timer=createtimer(timer)
While Not KeyHit(1)

   DrawImage3D(planet1,10,10)

   If MouseOver3D And Mousehit(1) Then End

   UpdateWorld()
   RenderWorld()
   Clear3D()
   waittimer(timer)
   Flip 0
Wend

End


MouseOver3D bezieht sich immer auf das zuletzt gezeichnete. Nach Clear3D() kannst du es meiner Meinung nach garnichtmehr richtig verwenden ô.O
Twitter
Download Jewel Snake!
Windows|Android
  • Zuletzt bearbeitet von Tankbuster am Mo, Dez 03, 2012 21:58, insgesamt einmal bearbeitet
 

funkmaster5000

BeitragMo, Dez 03, 2012 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Da tut sich bei mir leider nichts. Sollte ja eigentlich beenden. Komisch, dass das nicht geht, ich hab nur Copy&Paste bemüht!

Das hier ist der Code, der bei Draw3D mitgeliefert wird. Interessant ist diese Stelle, da sie zeigt, über welchem Button die Maus als letztes war: Text3D(Font1,-40,-140,MouseTest3D+" - Test",0):

Code: [AUSKLAPPEN]

Graphics3D 1024,768,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(58)
Local Camera=CreateCamera()
CameraClsColor Camera,64,64,64

Include "..\Includes\Draw3D2.bb"
DrawInit3D(Camera)

Local LoadedFont=LoadImage3D("..\Fonts\KarmaticArcade · (33).png",2,2,0,-100)
Local Font1=FontRange3D(LoadedFont)
Local Font2=FontRange3D(LoadedFont)
SetFont3D(Font1,1,1,-4,0)
SetFont3D(Font2,1,1,-4,8)

Local LoadedImage=LoadImage3D("..\Data\Draw3D2.png",2,2,0,-1)
Local GlowImage=LoadImage3D("..\Data\Glow.png",2,2,0,-2)
GrabImage3D(GlowImage,32,32,2,2)
Local GrabedImage=GrabImage3D(LoadedImage,176,98,160,76)

Local Angle#




While Not KeyHit(1)
   
   Angle=MilliSecs()/1000.0*45
   
   DrawImage3D(GrabedImage,-260,+80,GlowImage,-Angle)
   Text3D(Font1,-300,-20,MouseOver3D+" - Over",0)
   Text3D(Font1,-300,-40,MouseDown3D+" - Down",0)
   Text3D(Font1,-300,-60,MousePit3D+" - Pit",0)
   Text3D(Font1,-300,-80,MouseHit3D+" - Hit",0)
   
   DrawImage3D(GrabedImage,   0,+80,GlowImage,+Angle)
   Text3D(Font1,-40,-20,MouseOver3D+" - Over",0)
   Text3D(Font1,-40,-40,MouseDown3D+" - Down",0)
   Text3D(Font1,-40,-60,MousePit3D+" - Pit",0)
   Text3D(Font1,-40,-80,MouseHit3D+" - Hit",0)
   
   DrawImage3D(GrabedImage,+260,+80,GlowImage,-Angle)
   Text3D(Font1,+220,-20,MouseOver3D+" - Over",0)
   Text3D(Font1,+220,-40,MouseDown3D+" - Down",0)
   Text3D(Font1,+220,-60,MousePit3D+" - Pit",0)
   Text3D(Font1,+220,-80,MouseHit3D+" - Hit",0)
   
   Text3D(Font1,-40,-140,MouseTest3D+" - Test",0)
   
   Text3D(Font1,-40,+180,"Mouse ... 3D",0)
   Text3D(Font2,-460,+340,"Draw3D2 V.1.0",0)
   Text3D(Font2,+460,+340,"Time: "+CurrentTime(),2)
   Text3D(Font1,0,-340,"CHECK · EASY-BUTTONS · CHECK",1,0,Sin(MilliSecs()))
   
   WaitTimer Timer
   RenderWorld
   Clear3D()
   Flip 0
Wend
End


;~IDEal Editor Parameters:
;~C#Blitz3D

Tankbuster

BeitragMo, Dez 03, 2012 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
UpdateWorld()

und das CLS musst du weglassen. Das brauchst du bei 3D nicht.

Dann sollte es funktionieren Laughing

Edit: Code oben berichtigt. Sry, darauf hab ich nicht geachtet, weil ich dachte, die Grundlagen wären in diesem Fall klar.... ~_~
Twitter
Download Jewel Snake!
Windows|Android
 

funkmaster5000

BeitragMo, Dez 03, 2012 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundlagen eigne ich mir gerade an.

Ja jetzt geht es, allerdings war in meinem Beispiel das Bild noch nicht als Button definiert bei DrawImage3D. Was mir allerdings leider noch nicht die Frage mit diesem MouseTest3D beantwortet und wieso man darüber in dem Beispiel die Nummer des Buttons herausfindet.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Dez 05, 2012 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
MousePit3D ist immer dann TRUE, wenn der Mauszeiger über ein Button gefahren ist. Und zwar nur ein Frame, danach ist es wieder FALSE. Erst wenn die Maus aus dem Bild aus- und wieder raufgefahren wird, ist MousePit3D einmal kurz TRUE. Kann zum Beispiel als leise Soundausgabe für gefühlvolleres Bewegen auf einem Schachbrettmuster oder Spielemenü verwendet werden (If MousePit3D=1 Then PlaySound...). Ist allerdings fehlerhaft, wenn sich die Maus genau über zwei überlappende Buttons gleichzeitig befindet, was jedoch den Anwendungszweck verfehlt. MousePit3D ist ein Produkt, was ich praktisch gratis aus der internen Verarbeitung erhalten habe und ein mühseliges Programmieren ersparen kann, wenn man so eine Funktion benötigt. Very Happy

MouseTest3D ist einfach das Ergebnis, dass den Wert des in Reihenfolge gezeichneten Buttons ergibt über welchen sich die Maus gerade befindet. Kann beispielsweise verwendet werden, wenn man bei einem Schachbrett/Tilemap etc... nicht jeden Button selbst bestimmen, sondern am Ende es als ''Indizes'' verwenden möchte. Beispiel: Jeder Button hat bestimmte Eigenschaften die in einer Datenbank nacheinander eingetragen sind. Wenn man nun die Buttons einzeichnet, kann mit jeden Button alá If MouseOver3D abfragen und eine Aktion ausführen. Oder man zeichnet einfach die Buttons ein und führt am Ende einmal Wert=ArrayName(MouseTest3D) aus. Vorausgesetzt natürlich, die Anzahl der Buttons variiert nicht ständig. Auch hier nur ein Nebenprodukt aus der internen Draw3D-Verabeitung welche (aber auch nur selten) sehr hilfreich sein kann.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group