这博客是为了激励我自己学习使用, 自己学习过程中随便写写, 水平极其菜鸟, 因此稍微懂点的就可以右上角了
看了2个andengine中的小例子, 试着实现小球随手指移动的功能, 基本功能是实现了,至于代码写的如何, 这样实现有木有问题, 就不是我现在所操心的事情了, 现在处于依葫芦画瓢的阶段,因此可能代码的使用漏洞百出, 如果有人指出来, 不胜感激。
好, 下面上代码 上图:
package y.j.d.dragsprite; 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.PathModifier; import org.andengine.entity.modifier.PathModifier.Path; import org.andengine.entity.scene.IOnSceneTouchListener; import org.andengine.entity.scene.Scene; import org.andengine.entity.scene.background.Background; import org.andengine.entity.sprite.Sprite; import org.andengine.entity.util.FPSLogger; import org.andengine.input.touch.TouchEvent; import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas; import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory; import org.andengine.opengl.texture.region.ITextureRegion; import org.andengine.ui.activity.SimpleBaseGameActivity; import org.andengine.util.color.Color; import android.util.Log; public class MainActivity extends SimpleBaseGameActivity { private int width = 720; private int height = 480; private BitmapTextureAtlas texture; private ITextureRegion smile; @Override public EngineOptions onCreateEngineOptions() { Camera camera = new Camera(0, 0, width, height); return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(width, height), camera); } @Override protected void onCreateResources() { BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); texture = new BitmapTextureAtlas(getTextureManager(), 64, 64); smile = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texture, getAssets(), "smi.png", 0, 0); texture.load(); } @Override protected Scene onCreateScene() { getEngine().registerUpdateHandler(new FPSLogger()); Scene scene = new Scene(); scene.setBackground(new Background(Color.BLUE)); final Sprite sprite = new Sprite((width-smile.getWidth())/2, (height-smile.getHeight())/2, smile, getVertexBufferObjectManager()){ @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { Log.e("aaaaaaa", "ccccccccc"); switch (pSceneTouchEvent.getAction()) { case TouchEvent.ACTION_DOWN: this.setScale(2.0f); break; case TouchEvent.ACTION_MOVE: this.setPosition(pSceneTouchEvent.getX()-this.getWidth()/2, pSceneTouchEvent.getY()-this.getHeight()/2); break; default: this.setScale(1.0f); break; } return true; } }; scene.setOnSceneTouchListener(new IOnSceneTouchListener() { @Override public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { Log.e("aaaaaaa", "bbbbbbbbbb"); sprite.clearEntityModifiers(); if(pSceneTouchEvent.isActionUp()){ Path path = new Path(new float[]{sprite.getX(), pSceneTouchEvent.getX()-sprite.getWidth()/2}, new float[]{sprite.getY(), pSceneTouchEvent.getY()-sprite.getHeight()/2}); sprite.registerEntityModifier(new PathModifier(2, path)); } return true; } }); scene.attachChild(sprite); scene.registerTouchArea(sprite); scene.setTouchAreaBindingOnActionDownEnabled(true); scene.setTouchAreaBindingOnActionMoveEnabled(true); return scene; } }
效果图:
基本功能搞定, 效果是小球可以拖动, 或者手指点到小球外, 那么小球就会向手指移动。
不知道为什么 eclipse 老是和设备失去连接, 为了证明logcat还起作用, 只好在和屏幕互动的时候加些log。 唉 不知道怎么解决啊。