Android 如何在按下触摸区域时执行操作
我是新来安德林的。 作为一个基本练习,我尝试制作一个游戏,当你按下一个按钮时,精灵向左移动,当我按下另一个按钮时,精灵向右移动。当按下任何按钮时,精灵应该向左或向右移动。但是,根据我目前的代码,当我按下任何按钮时,精灵向左或向右移动10像素,然后不管我按住按钮多久都会停下来。 这是代码Android 如何在按下触摸区域时执行操作,android,andengine,sprite,Android,Andengine,Sprite,我是新来安德林的。 作为一个基本练习,我尝试制作一个游戏,当你按下一个按钮时,精灵向左移动,当我按下另一个按钮时,精灵向右移动。当按下任何按钮时,精灵应该向左或向右移动。但是,根据我目前的代码,当我按下任何按钮时,精灵向左或向右移动10像素,然后不管我按住按钮多久都会停下来。 这是代码 package com.example.and_tryout; import org.andengine.engine.camera.Camera; import org.andengine.engine.op
package com.example.and_tryout;
import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.modifier.MoveXModifier;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.sprite.Sprite;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.texture.ITexture;
import org.andengine.opengl.texture.bitmap.BitmapTexture;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.texture.region.TextureRegionFactory;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.adt.io.in.IInputStreamOpener;
import org.andengine.util.debug.Debug;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends SimpleBaseGameActivity {
private static int CAMERA_WIDTH = 800;
private static int CAMERA_HEIGHT = 480;
private ITextureRegion mtexture;
private ITextureRegion mleft,mright;
@Override
public EngineOptions onCreateEngineOptions() {
// TODO Auto-generated method stub
Camera camera = new Camera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT);
return new EngineOptions(true,ScreenOrientation.LANDSCAPE_FIXED,new RatioResolutionPolicy(CAMERA_WIDTH,CAMERA_HEIGHT),camera);
}
@Override
protected void onCreateResources() {
// TODO Auto-generated method stub
try{
ITexture texture = new BitmapTexture (this.getTextureManager(), new IInputStreamOpener(){
@Override
public InputStream open() throws IOException {
// TODO Auto-generated method stub
return getAssets().open("png/ring2.png");
}
});
ITexture leftt = new BitmapTexture(this.getTextureManager(),new IInputStreamOpener(){
@Override
public InputStream open() throws IOException {
// TODO Auto-generated method stub
return getAssets().open("png/left.png");
}
});
ITexture rightt = new BitmapTexture(this.getTextureManager(),new IInputStreamOpener(){
@Override
public InputStream open() throws IOException {
// TODO Auto-generated method stub
return getAssets().open("png/right.png");
}
});
texture.load();
leftt.load();
rightt.load();
this.mtexture = TextureRegionFactory.extractFromTexture(texture);
this.mleft = TextureRegionFactory.extractFromTexture(leftt);
this.mright = TextureRegionFactory.extractFromTexture(rightt);
}catch(IOException e){
Debug.e (e);
}
}
@Override
protected Scene onCreateScene() {
Scene scene = new Scene();
scene.getBackground().setColor(0.09804f, 0.6274f, 0.8784f);
final Sprite spr = new Sprite(0,0,mtexture,getVertexBufferObjectManager());
Sprite left = new Sprite(0,420,60,60,mleft,getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(TouchEvent event,float X,float Y){
spr.registerEntityModifier(new MoveXModifier(0.5f,spr.getX(),spr.getX()-10));
return true;
}
};
Sprite right = new Sprite(740,420,60,60,mright,getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(TouchEvent event,float X,float Y){
spr.registerEntityModifier(new MoveXModifier(0.5f,spr.getX(),spr.getX()+10));
return true;
}
};
scene.attachChild(spr);
scene.attachChild(left);
scene.attachChild(right);
scene.registerTouchArea(left);
scene.registerTouchArea(right);
return scene;
}
}
我想不出任何解决方案。我在谷歌上搜索了很多次,但它没有给我任何关于这方面的信息。将条件触地、触地和触地移动放置在精灵的触地区域中,如下所示:
public boolean onAreaTouched(TouchEvent event,float X,float Y){
if (event.getAction() == MotionEvent.ACTION_DOWN) {
spr.registerEntityModifier(new MoveXModifier(0.5f,spr.getX(),spr.getX()-10));
}
if (event.getAction() == MotionEvent.ACTION_UP) {
}
}
最好使用PhysicsHandler以一定速度移动精灵。修改器在完成之前无法访问,这就是为什么即使按下按钮,精灵也不会再移动得更远 否则,如果你想要简单的连续运动,你可以简单地增加精灵的位置
@Override
public boolean onAreaTouched(TouchEvent event,float X,float Y)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
spr.setPosition(spr.getX()+1, spr.getY());
}
return true;
}
使用spr.getX()-1对左运动执行相同的操作
@Override
public boolean onAreaTouched(TouchEvent event,float X,float Y)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
spr.setPosition(spr.getX()+1, spr.getY());
}
return true;
}