Ja das wars....DANKE DIR..!
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu
private SimpleVector convertScreenPixelsTo3D(int x, int y)
{
SimpleVector direction = new SimpleVector( Interact2D.reproject2D3DWS(world.getCamera(), fb, x, y ) ).normalize();
float distance = world.calcMinDistance(world.getCamera().getPosition(), direction, 10000 );
SimpleVector point = new SimpleVector( direction );
point.scalarMul( distance );
point.add(world.getCamera().getPosition() );
return point;
}
public boolean onTouchEvent(MotionEvent me) {
if (me.getAction() == MotionEvent.ACTION_DOWN)
{
xpos = me.getX();
ypos = me.getY();
touched_poly = check_which_poly_clicked((int)xpos, (int)ypos);
if(touched_poly != null) // nutzer touches ein polygon
{
move = true;
}
return true;
}
if (me.getAction() == MotionEvent.ACTION_UP) {
move = false;
return true;
}
if (me.getAction() == MotionEvent.ACTION_MOVE)
{
xpos = me.getX();
ypos = me.getY();
return true;
}
return super.onTouchEvent(me);
}
public void onDrawFrame(GL10 gl) {
fb.clear(back);
world.renderScene(fb);
world.draw(fb);
fb.display();
if(move && touched_poly != null)
{
SimpleVector movePoint = convertScreenPixelsTo3D((int)xpos, (int)ypos);
movePoint.z = 0;
touched_poly.clearTranslation();
touched_poly.translate(movePoint);
}
...
}
Quote from: EgonOlsen on February 01, 2013, 09:51:12 PMGut geraten...! Das war mein Problem. Bei Fullscreen funktioniert alles einwandfrei..!
Leider beschreibst du nicht genau, wie sich das Problem bei dir äußert. Ich rate mal ein wenig: Du hast die Notification Bar sichtbar? In dem Fall beginnt der Bildschirm koordinatentechnisch unter der Leiste, aber die Touchkoordinaten starten erst darunter. Du musst die Größe der Leiste zu den Daten des Events addieren. Wenn es das nicht ist, beschreib doch bitte mal genauer, was das Problem ist.
Quote from: EgonOlsen on February 01, 2013, 09:51:12 PMWerd ich mir merken..!
Das hängt letztendlich von deinen Anforderungen ab, aber irgendwas spezielles gibt es da nicht. jPCT interessiert sich nicht für Touchevents und arbeitet einfach mit den Werten, die du übergibst. Wo die herkommen, obliegt dir. Achte nur darauf, dass du nicht direkt in den Eventhandlern an jPCT-Objekten arbeitest, weil die Events parallel zum Renderthread laufen und du sonst alle Arten von "lustigen" Seiteneffekten bekommst. Es ist am besten, in den Eventhandler-Methoden nur Flags/Werte zu setzen und diese in onDrawFrame bzw. auszuwerten.
private SimpleVector convertScreenPixelsTo3D(int x, int y)
{
SimpleVector direction = new SimpleVector( Interact2D.reproject2D3DWS(world.getCamera(), fb, x, y ) ).normalize();
float distance = world.calcMinDistance(world.getCamera().getPosition(), direction, 10000 );
SimpleVector point = new SimpleVector( direction );
point.scalarMul( distance );
point.add(world.getCamera().getPosition() );
return point;
}
int x = (int)me.getX();
int y = (int)me.getY();
SimpleVector sv = convertScreenPixelsTo3D(x, y);
Log.i(TEST-JPCT,"Point in Screen Pixels..: ("+x+","+y+")");
Log.i(TEST-JPCT,"Point in 3D..: "+sv.toString());
poly.clearTranslation();
poly.translate(sv);
Page created in 0.036 seconds with 12 queries.