Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (408)
games submitted by our members
Games in WIP (293)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Best way to do a "hover" mouse picking?  (Read 719 times)
0 Members and 1 Guest are viewing this topic.
Offline ahottev

Senior Newbie





« Posted 2010-12-07 15:00:42 »

Hello,

I need a way to get my program to do the mouse picking while the mouse is hovering over something else. It needs to be done, well... always, all the time. This is for my 3D map, which is composed of tiles, and i'd like the tile under the cursor to be highlighted in some way.

Currently, the picking only works when the mouse is clicked, left or right button, how do i change this?

I guess it would probably be really cpu-intensive to do it all the time, what's the best approach?

Here's my picking code:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
public class TileSelectionBehavior extends PickMouseBehavior{
   
   private DebugPanel debug;
   private GamePanel game;
   private ArrayList<Button2D> button2D;
     
   //orientation of selection vector
  private static final Vector3d SELVEC = new Vector3d(0.0, 0.0, 1.0);
   
   public TileSelectionBehavior( Canvas3D canvas, BranchGroup root, Bounds bounds, DebugPanel debug ){
      super(canvas, root, bounds);
      setSchedulingBounds(bounds);
      this.debug = debug;
      this.game = null;
           
      pickCanvas.setMode(PickCanvas.GEOMETRY_INTERSECT_INFO);
         
   }
   
   public TileSelectionBehavior( Canvas3D canvas, BranchGroup root, Bounds bounds, GamePanel game,
                          ArrayList<Button2D> button2D){
      super(canvas, root, bounds);
      setSchedulingBounds(bounds);
      this.game = game;
      this.debug = null;
      this.button2D = button2D;
     
      pickCanvas.setMode(PickCanvas.GEOMETRY_INTERSECT_INFO);
           
   }

   public void updateScene(int xpos, int ypos) {
     
      // testing button2D from top to bottom
     // for screen hierarchy
     if (debug == null){
      if (button2D.size() > 0 ){
      for(int i = 0; i < button2D.size(); i++){
         Button2D b2D = button2D.get(i);
            if (xpos > b2D.getPosX() & xpos < b2D.getPosX() + b2D.getWidth()){
               if (ypos > b2D.getPosY() & ypos < b2D.getPosY()+ b2D.getHeight()){
                  //within a button bound
                 game.clicked2D(b2D.getId());
                  return;
               }
            }
         }
      //return;
     }
      }
     
      //3D picking
     pickCanvas.setShapeLocation(xpos,ypos);
     
      Point3d eyePos = pickCanvas.getStartPosition();  //viewer location
     
      PickResult pickResult = null;
      pickResult = pickCanvas.pickClosest();
                 
      if (pickResult != null){
         
         //pickResultInfo(pickResult);
        if (mevent.getButton() == mevent.BUTTON1){      //left click
           if (debug != null){
               debug.clickedTile(pickResult);
            }else if (game != null){
               game.clickedTile(pickResult);
            }
         }else if (mevent.getButton() == mevent.BUTTON3){ //right click
           if (debug != null){
               //debug.clickedTile(pickResult);
           }else if (game != null){
               game.clickedRTile(pickResult);
            }
         }
      }
   }

}

Offline tom
« Reply #1 - Posted 2010-12-07 15:10:39 »

You can use WakeupOnAWTEvent to wake up on mouse moved or dragged. Or you can use WakeupOnElapsedFrames(0) to wake up every frame.

Offline ahottev

Senior Newbie





« Reply #2 - Posted 2010-12-07 15:27:19 »

You can use WakeupOnAWTEvent to wake up on mouse moved or dragged. Or you can use WakeupOnElapsedFrames(0) to wake up every frame.

Wow, thanks a lot.

I really thought i would have been harder than that. Smiley
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline philfrei
« Reply #3 - Posted 2010-12-08 01:07:31 »

I'm curious, why not get a MouseMotionListener involved?

"Greetings my friends! We are all interested in the future, for that is where you and I are going to spend the rest of our lives!" -- The Amazing Criswell
Offline tom
« Reply #4 - Posted 2010-12-09 08:56:04 »

That would work too.

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars and Titan!

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (139 views)
2013-05-17 21:29:12

alaslipknot (148 views)
2013-05-16 21:24:48

gouessej (178 views)
2013-05-16 00:53:38

gouessej (172 views)
2013-05-16 00:17:58

theagentd (182 views)
2013-05-15 15:01:13

theagentd (166 views)
2013-05-15 15:00:54

StreetDoggy (211 views)
2013-05-14 15:56:26

kutucuk (235 views)
2013-05-12 17:10:36

kutucuk (234 views)
2013-05-12 15:36:09

UnluckyDevil (239 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.194 seconds with 20 queries.