Here're some resources for this part:
andengine.jar
face_box.png
onscreen_control_base.png
onscreen_control_knob.png
Create a new android application project named AndEngineDemo
Add andengine.jar to libs folder of the project
Create the folder named gfx under the folder assets, and copy 3 pictures above face_box.png, onscreen_control_base.png, onscreen_control_knob.png to this folder
Create the package: org.anddev.andengine.examples in the src folder of the project
Create a new class named BaseExample in the above package, here is the code of this class:
package org.anddev.andengine.examples;import org.anddev.andengine.ui.activity.BaseGameActivity;import android.view.Menu;import android.view.MenuItem;/*** (c) 2010 Nicolas Gramlich* (c) 2011 Zynga Inc.*
Create a class named AnalogOnScreenControlExample in the above package, here is the code of this class:* @author Nicolas Gramlich* @since 22:10:28 - 11.04.2010*/public abstract class BaseExample extends BaseGameActivity {// ===========================================================// Constants// ===========================================================
private static final int MENU_TRACE = Menu.FIRST;// ===========================================================// Fields// ===========================================================// ===========================================================// Constructors// ===========================================================// ===========================================================// Getter & Setter// ===========================================================// ===========================================================// Methods for/from SuperClass/Interfaces// ===========================================================@Overridepublic boolean onCreateOptionsMenu(final Menu pMenu) {pMenu.add(Menu.NONE, MENU_TRACE, Menu.NONE, "Start Method Tracing");return super.onCreateOptionsMenu(pMenu);}@Overridepublic boolean onPrepareOptionsMenu(final Menu pMenu) {pMenu.findItem(MENU_TRACE).setTitle(this.mEngine.isMethodTracing() ? "Stop Method Tracing" : "Start Method Tracing");return super.onPrepareOptionsMenu(pMenu);}@Overridepublic boolean onMenuItemSelected(final int pFeatureId, final MenuItem pItem) {switch(pItem.getItemId()) {case MENU_TRACE:if(this.mEngine.isMethodTracing()) {this.mEngine.stopMethodTracing();} else {this.mEngine.startMethodTracing("AndEngine_" + System.currentTimeMillis() + ".trace");}return true;default:return super.onMenuItemSelected(pFeatureId, pItem);}}// ===========================================================// Methods// ===========================================================// ===========================================================// Inner and Anonymous Classes// ===========================================================}
Open the AndroidManifest.xml and insert the activity element like this:package org.anddev.andengine.examples;import javax.microedition.khronos.opengles.GL10;import org.anddev.andengine.engine.Engine;import org.anddev.andengine.engine.camera.Camera;import org.anddev.andengine.engine.camera.hud.controls.AnalogOnScreenControl;import org.anddev.andengine.engine.camera.hud.controls.AnalogOnScreenControl.IAnalogOnScreenControlListener;import org.anddev.andengine.engine.camera.hud.controls.BaseOnScreenControl;import org.anddev.andengine.engine.handler.physics.PhysicsHandler;import org.anddev.andengine.engine.options.EngineOptions;import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;import org.anddev.andengine.entity.modifier.ScaleModifier;import org.anddev.andengine.entity.modifier.SequenceEntityModifier;import org.anddev.andengine.entity.scene.Scene;import org.anddev.andengine.entity.scene.background.ColorBackground;import org.anddev.andengine.entity.sprite.Sprite;import org.anddev.andengine.entity.util.FPSLogger;import org.anddev.andengine.opengl.texture.TextureOptions;import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;import org.anddev.andengine.opengl.texture.region.TextureRegion;import android.widget.Toast;/*** (c) 2010 Nicolas Gramlich* (c) 2011 Zynga** @author Nicolas Gramlich* @since 00:06:23 - 11.07.2010*/public class AnalogOnScreenControlExample extends BaseExample {// ===========================================================// Constants// ===========================================================private static final int CAMERA_WIDTH = 480;private static final int CAMERA_HEIGHT = 320;// ===========================================================// Fields// ===========================================================private Camera mCamera;private BitmapTextureAtlas mBitmapTextureAtlas;private TextureRegion mFaceTextureRegion;private BitmapTextureAtlas mOnScreenControlTexture;private TextureRegion mOnScreenControlBaseTextureRegion;private TextureRegion mOnScreenControlKnobTextureRegion;// ===========================================================// Constructors// ===========================================================// ===========================================================// Getter & Setter// ===========================================================// ===========================================================// Methods for/from SuperClass/Interfaces// ===========================================================@Overridepublic Engine onLoadEngine() {Toast.makeText(this, "Also try tapping this AnalogOnScreenControl!", Toast.LENGTH_LONG).show();this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));}@Overridepublic void onLoadResources() {BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");this.mBitmapTextureAtlas = new BitmapTextureAtlas(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "face_box.png", 0, 0);this.mOnScreenControlTexture = new BitmapTextureAtlas(256, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA);this.mOnScreenControlBaseTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "onscreen_control_base.png", 0, 0);this.mOnScreenControlKnobTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "onscreen_control_knob.png", 128, 0);this.mEngine.getTextureManager().loadTextures(this.mBitmapTextureAtlas, this.mOnScreenControlTexture);}@Overridepublic Scene onLoadScene() {this.mEngine.registerUpdateHandler(new FPSLogger());final Scene scene = new Scene();scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));final int centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;final int centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;final Sprite face = new Sprite(centerX, centerY, this.mFaceTextureRegion);final PhysicsHandler physicsHandler = new PhysicsHandler(face);face.registerUpdateHandler(physicsHandler);scene.attachChild(face);final AnalogOnScreenControl analogOnScreenControl = new AnalogOnScreenControl(0, CAMERA_HEIGHT - this.mOnScreenControlBaseTextureRegion.getHeight(), this.mCamera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f, 200, new IAnalogOnScreenControlListener() {@Overridepublic void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {physicsHandler.setVelocity(pValueX * 100, pValueY * 100);}@Overridepublic void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {face.registerEntityModifier(new SequenceEntityModifier(new ScaleModifier(0.25f, 1, 1.5f), new ScaleModifier(0.25f, 1.5f, 1)));}});analogOnScreenControl.getControlBase().setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);analogOnScreenControl.getControlBase().setAlpha(0.5f);analogOnScreenControl.getControlBase().setScaleCenter(0, 128);analogOnScreenControl.getControlBase().setScale(1.25f);analogOnScreenControl.getControlKnob().setScale(1.25f);analogOnScreenControl.refreshControlKnobPosition();scene.setChildScene(analogOnScreenControl);return scene;}@Overridepublic void onLoadComplete() {}// ===========================================================// Methods// ===========================================================// ===========================================================// Inner and Anonymous Classes// ===========================================================}
Run the project (in debug mode) to generate apk file in the bin folder<applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity android:name=".AnalogOnScreenControlExample" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity>
Run android emulator with virtualboxadb install -r AndEngineDemo.apkadb shell am start -n org.anddev.andengine.examples/.AnalogOnScreenControlExample
Press Alt-F1 to switch into terminal and use netcfg to view ip address of the emulator
Press Alt-F7 to switch into GUI of android
In Windows OS, start cmd, cd to the bin folder of the project and connect adb to emulator through ip address
Then run the batch file r.bat
Choose Agree and then see the result:
[ttaiit.blogspot.com] - please write clearly the source on copying this tutorial :)
0 comments:
Post a Comment