Pick

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: Pick

BeitragFr, Jan 22, 2010 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich möchte Types picken.
Wenn ich aber die Maus auf ein Type ziehe, werden alle markiert.
Wie kann ich diese einzeln markieren?

Hier mein Ansatz:
Code: [AUSKLAPPEN]
Type enemy
   Field x#,y#,z#
   Field yaw
   Field mesh
   Field timer,st_timer,richtung,stopp
   Field health%
   Field exxp%
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv    = CreatePivot()
Global cam    = CreateCamera(piv)

Global gegner = LoadAnimMesh("models\dwarf2.b3d")

;----------------------------------------------------------------------------------------------|
;Gegner
For i = 0 To 39
   e.enemy = New enemy
   e\x#    = Rnd(-1000,1000)
   e\y#    = 0
   e\z#    = Rnd(100,300)
   e\yaw   = Rnd(-90,90)
   e\mesh  = CopyEntity(gegner)
   e\exxp% = 120
   EntityPickMode(e\mesh,2)
Next

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
While Not KeyHit(1)
   WaitTimer(timer)
   Cls
   
   initPick()
   
   RenderWorld()
   UpdateWorld()
   Flip 0
Wend
End
;----------------------------------------------------------------------------------------------|
Function initPick()
   For e.enemy = Each enemy
      mxx = MouseX()
      myy = MouseY()
      entity = CameraPick(cam,mxx,myy)
      If entity = 0 Then EntityColor e\mesh, 255, 255, 255
         If entity<>0 Then EntityColor e\mesh, 0, 255, 0
   Next
End Function


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Nicdel

BeitragFr, Jan 22, 2010 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine InitPick-Funktion muss etwas anders aussehen, CameraPick sollte nicht in die Schleife und die Abfrage ist falsch. So sollte es gehen:

BlitzBasic: [AUSKLAPPEN]
Function initPick()
mxx = MouseX()
myy = MouseY()
entity = CameraPick(cam,mxx,myy)
For e.enemy = Each enemy
If entity = e\mesh
EntityColor e\mesh, 0, 255, 0
Else
EntityColor e\mesh, 255, 255, 255
EndIf
Next
End Function
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

N0X

BeitragFr, Jan 22, 2010 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, danke! Smile
Wie kann ich jetzt das zuletzt gepickte Objekt grün lassen, und wenn man auf freie Fläche klickt wird es wieder normalfarben?

//EDIT:
Hat sich wieder von selbst geklärt! Laughing
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

N0X

BeitragSa, Jan 23, 2010 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt noch eine Maus-Abfrage mit in die Funktion gestellt.
Warum funktioniert diese, mit [[MouseHit()]] nur bei dem ersten Objekt?
Und warum funktioniert es mit [[MouseDown()]]? Surprised

Mfg,
N0X

Code: [AUSKLAPPEN]
Function initPick()
   mxx = MouseX()
      myy = MouseY()
      entity = CameraPick(cam,mxx,myy)
      For e.enemy = Each enemy
      If MouseHit(1) Then
            If entity = e\mesh
            e\picked = 1
             EntityColor e\mesh,0,255,0
          Else
            e\picked = 0
            EntityColor e\mesh,255,255,255
          EndIf
      EndIf
   Next
End Function


Code: [AUSKLAPPEN]
Function initPick()
   mxx = MouseX()
      myy = MouseY()
      entity = CameraPick(cam,mxx,myy)
      For e.enemy = Each enemy
      If MouseDown(1) Then
            If entity = e\mesh
            e\picked = 1
             EntityColor e\mesh,0,255,0
          Else
            e\picked = 0
            EntityColor e\mesh,255,255,255
          EndIf
      EndIf
   Next
End Function
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSa, Jan 23, 2010 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Lies im FAQ nach... Nachdem Mousehit() aufgerufen wurde, gibt es danach immer nur noch 0 Zurück: Am Anfang der Hauptschleife in einer Variable speichern.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSa, Jan 23, 2010 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, Danke! Smile
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

N0X

BeitragSo, Jan 24, 2010 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
So, meine Pickfunktion wird nun leider sehr langsam sobald ich mehr als 20 Gegner habe.
Kann man die irgendwie noch optimieren?

Code: [AUSKLAPPEN]
Function initPick()
   mh  = MouseHit(1)
   mxx = MouseX()
      myy = MouseY()
      entity = CameraPick(cam,mxx,myy)
      For e.enemy = Each enemy
      If mh Then
            If entity = e\mesh
            e\picked = 1
             EntityColor e\mesh,0,255,0
          Else
            e\picked = 0
            EntityColor e\mesh,255,255,255
          EndIf
      EndIf
   Next
End Function


//EDIT:
Hm, liegt nicht an der Funktion, wahrscheinlich zu High-Poly Modelle. Rolling Eyes
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group