www.jpct.net
jPCT - a 3d engine for Java => Support => Topic started by: slenkar on June 01, 2009, 04:59:46 pm
-
Has anyone noticed a lack of mouse-button responsiveness with the AWTGL renderer?
The mouse movements and keyboard work fine but the mouse button isnt always registered.
-
No idea. jPCT doesn't do anything with the mouse...it's all done by LWJGL. You may try to add a Thread.yield() or Thread.sleep(1) to your main loop and/or implement an IPaintListener and add the yield/sleep in either before- or afterPainting-method, but that's just a wild guess...i've no idea if it helps.
-
Im using AWT to handle mouse and keyboard events ,is this the reason?
When I use Lwjgl to handle events the screen goes blank, is there a different renderer that allows lwjgl mouse handling?
-
Depends on your needs. If you need AWT/Swing integration, you have to use the AWTGLRenderer and the AWT events for mouse and keyboard. If you don't need that, you can use the native GLRenderer instead. There's a HelloWorld for this one too.
You can't use LWJGL's mouse and keyboard implementations with the AWTGLRenderer. One last option, if nothing else helps, is to use the JOGL-renderer instead.
-
The mouse movements and keyboard work fine but the mouse button isnt always registered.
If the movements work fine, i would expect the buttons to be responsive too. Are you 100% sure that it's not your code's fault? Do you have a simple test case that shows the problem? Maybe it's related to your machine only somehow!?
-
I did some tests and realised it happens when moving the mouse and pressing the button at the same time.
import com.threed.jpct.*;
//import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.KeyListener;
//import java.awt.Insets;
import javax.swing.JFrame;
public class mousebutton extends JFrame implements MouseListener,
MouseMotionListener,KeyListener {
public static World world;
private FrameBuffer buffer;
public JFrame frame;
public void keyPressed(KeyEvent e)
{}
public void keyTyped(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_A)
{
//System.out.println("typed a");
}
//nothing
}
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_W)
{
//System.out.println("released a");
}
//nothing
}
public static void main(String[] args) throws Exception {
new mousebutton().loop();
}
public void mouseEntered( MouseEvent e ) {}
public void mouseExited( MouseEvent e ) {}
public void mouseReleased( MouseEvent e ){
System.out.println("mouse released");
}
public void mouseClicked( MouseEvent e ){
System.out.println("mouse clicked");
}
public void mousePressed( MouseEvent e )
{
}
public void mouseMoved( MouseEvent e ) {
int x = e.getX();
int y = e.getY();
}
public void mouseDragged( MouseEvent e )
{
// get the mouse's coordinates:
}
public mousebutton() throws Exception {
frame=new JFrame("Hello world");
frame.setSize(800, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
private void loop() throws Exception {
FrameBuffer buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_NORMAL);
Canvas canvas=buffer.enableGLCanvasRenderer();
buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
frame.add(canvas);
canvas.addMouseListener( this );
canvas.addMouseMotionListener( this );
canvas.addKeyListener(this);
while (frame.isShowing()) {
buffer.clear(java.awt.Color.BLACK);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.displayGLOnly();
canvas.repaint();
//Bullet.update_bullets();
Thread.sleep(10);
//System.out.println(Mouse.getDX());
}
//buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
// buffer.dispose();
frame.dispose();
System.exit(0);
}
}
notice only mouse release events are generated, when moving the mouse
-
I would say that this is correct behaviour. When pressing at x and releasing at y, it's not a click, because you haven't clicked on something. Compare mousePressed() to mouseReleased() instead and you'll see that both events will be fired no matter if you drag the mouse or not.
-
ah ok thanks,
I switched to the normal gl renderer in the end
Ill keep that in mind if i have to switch back for some reason.