Map 将TMX文件与AndEngine一起使用

Map 将TMX文件与AndEngine一起使用,map,background,andengine,isometric,tmx,Map,Background,Andengine,Isometric,Tmx,我有一个用“平铺”创建的等距.TMX文件,我使用的是AndEngine GLES1。我想把它用作背景或地图。如果可能的话,我还想把我的“玩家”动作绑在瓷砖上。我知道有一些问题需要解决,但是我需要实际的代码来显示背景 这是我唯一的java文件 package com.example.game; import java.util.LinkedList; import org.anddev.andengine.engine.Engine; import org.anddev.andengin

我有一个用“平铺”创建的等距.TMX文件,我使用的是AndEngine GLES1。我想把它用作背景或地图。如果可能的话,我还想把我的“玩家”动作绑在瓷砖上。我知道有一些问题需要解决,但是我需要实际的代码来显示背景

这是我唯一的java文件

package com.example.game;

 import java.util.LinkedList;

 import org.anddev.andengine.engine.Engine;
 import org.anddev.andengine.engine.camera.Camera;
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.MoveModifier;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
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.input.touch.TouchEvent;
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 org.anddev.andengine.ui.activity.BaseGameActivity;

 import android.view.Display;

 public class SimpleGame extends BaseGameActivity implements
IOnSceneTouchListener {
//Set up camera
private Camera mCamera;

//Set main scene
private Scene mMainScene;
//?? graphics variables?
private BitmapTextureAtlas mBitmapTextureAtlas;
private TextureRegion mPlayerTextureRegion;
//declaring sprite variable for player character
private Sprite player;
//Equiping ammunition
private LinkedList projectileLL;
private LinkedList projectilesToBeAdded;
private TextureRegion mProjectileTextureRegion;


@Override
public Engine onLoadEngine() {
    //Preparing Engine giving it proper resolution (what you see on the screen)
    final Display display = getWindowManager().getDefaultDisplay();
    int cameraWidth = display.getWidth();
    int cameraHeight = display.getHeight();

     mCamera = new Camera(0, 0, cameraWidth, cameraHeight);

    return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE,
    new RatioResolutionPolicy(cameraWidth, cameraHeight), mCamera));
}

@Override
public void onLoadResources() {
    mBitmapTextureAtlas = new BitmapTextureAtlas(512, 512,
        TextureOptions.BILINEAR_PREMULTIPLYALPHA);

    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    // assinging the player.png image for the mPlayerTextureRegion
    mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory
        .createFromAsset(this.mBitmapTextureAtlas, this, "player.png",
        0, 0);
    mEngine.getTextureManager().loadTexture(mBitmapTextureAtlas);

    mProjectileTextureRegion = BitmapTextureAtlasTextureRegionFactory
        .createFromAsset(this.mBitmapTextureAtlas, this,
        "Projectile.png", 64, 0);
}

@Override
public Scene onLoadScene() {
    //??? Creating the scene?
    mEngine.registerUpdateHandler(new FPSLogger());

    mMainScene = new Scene();

    mMainScene
        .setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));

    final int PlayerX = this.mPlayerTextureRegion.getWidth() / 2;
    final int PlayerY = (int) ((mCamera.getHeight() - mPlayerTextureRegion
            .getHeight()) / 2);

    // Using sprite to illustrate player
    player = new Sprite(PlayerX, PlayerY, mPlayerTextureRegion);
    // Place player on game screen
    mMainScene.attachChild(player);

    projectileLL = new LinkedList();
    projectilesToBeAdded = new LinkedList();

    mMainScene.setOnSceneTouchListener(this);

    return mMainScene;
}
     // This method is used for shooting "bullets"
    // Need to find a way to limit ammunition based on in game inventory
      private void shootProjectile(final float pX, final float pY) {

int offX = (int) (pX - player.getX());
int offY = (int) (pY - player.getY());
if (offX <= 0)
    return;

//Using projectile.png as sprite, what is .deepCopy???
final Sprite projectile;
projectile = new Sprite(player.getX(), player.getY(),
mProjectileTextureRegion.deepCopy());
mMainScene.attachChild(projectile, 1);

int realX = (int) (mCamera.getWidth() + projectile.getWidth() / 2.0f);
float ratio = (float) offY / (float) offX;
int realY = (int) ((realX * ratio) + projectile.getY());

int offRealX = (int) (realX - projectile.getX());
int offRealY = (int) (realY - projectile.getY());
float length = (float) Math.sqrt((offRealX * offRealX)
        + (offRealY * offRealY));
float velocity = 480.0f / 1.0f; // 480 pixels per 1 sec//
float realMoveDuration = length / velocity;

MoveModifier mod = new MoveModifier(realMoveDuration,
projectile.getX(), realX, projectile.getY(), realY);
projectile.registerEntityModifier(mod.deepCopy());

projectilesToBeAdded.add(projectile);
    }

public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {

    if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
        final float touchX = pSceneTouchEvent.getX();
        final float touchY = pSceneTouchEvent.getY();
        shootProjectile(touchX, touchY);
        return true;
    }
return false;
}


@Override
public void onLoadComplete() {


}
    }
package com.example.game;
导入java.util.LinkedList;
导入org.anddev.andengine.engine.engine;
导入org.anddev.andengine.engine.camera.camera;
导入org.anddev.andengine.engine.options.EngineOptions;
导入org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
导入org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
导入org.anddev.andengine.entity.modifier.MoveModifier;
导入org.anddev.andengine.entity.scene.scene;
导入org.anddev.andengine.entity.scene.scene.IOnSceneTouchListener;
导入org.anddev.andengine.entity.scene.background.ColorBackground;
导入org.anddev.andengine.entity.sprite.sprite;
导入org.anddev.andengine.entity.util.FPSLogger;
导入org.anddev.andengine.input.touch.TouchEvent;
导入org.anddev.andengine.opengl.texture.TextureOptions;
导入org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
导入org.anddev.andengine.opengl.texture.atlas.bitmap.BitMapTextureAtlastTextureRegionFactory;
导入org.anddev.andengine.opengl.texture.region.TextureRegion;
导入org.anddev.andengine.ui.activity.BaseGameActivity;
导入android.view.Display;
公共类SimpleName扩展BaseGameActivity实现
Ionscenetouch侦听器{
//设置摄像机
私人摄像机麦卡梅拉;
//布景
晚更新世私人场景;
//?图形变量?
私有BitmapTextureAtlas mBitmapTextureAtlas;
私有纹理区域mPlayerTextureRegion;
//为玩家角色声明精灵变量
私人精灵玩家;
//装备弹药
私有链接列表项目;
添加了私有链接列表项目;
私有结构区域MProjectleTextureRegion;
@凌驾
公共引擎onLoadEngine(){
//准备引擎以提供适当的分辨率(屏幕上显示的内容)
最终显示=getWindowManager().getDefaultDisplay();
int cameraWidth=display.getWidth();
int cameraHeight=display.getHeight();
mCamera=新相机(0,0,cameraWidth,cameraHeight);
返回新引擎(新引擎选项(true,ScreenOrientation.scape,
新比率解决方案政策(cameraWidth,CamerahHeight),mCamera);
}
@凌驾
公共void onLoadResources(){
mBitmapTextureAtlas=新的位图纹理Atlas(512,
结构选项:双线性(前倍频);
BitmapTextureLastTextureRegionFactory.setAssetBasePath(“gfx/”);
//为mPlayerTextureRegion分配player.png图像
mPlayerTextureRegion=BitMapTextureAtlastTextureRegion工厂
.createFromAsset(this.mBitmapTextureAtlas,this,“player.png”,
0, 0);
mEngine.getTextureManager().loadTexture(mBitmapTextureAtlas);
MProjectleteTextureRegion=BitMapTextureAtlastTextureRegion工厂
.createFromAsset(this.mBitmapTextureAtlas,this,
“射弹.png”,64,0);
}
@凌驾
公共场景onLoadScene(){
//?创建场景?
registerUpdateHandler(新的FPSLogger());
mMainScene=新场景();
第四纪
.背景(新彩色背景(0.09804f、0.6274f、0.8784f));
final int PlayerX=this.mPlayerTextureRegion.getWidth()/2;
final int PlayerY=(int)((mCamera.getHeight()-mPlayerTextureRegion
.getHeight())/2);
//用精灵来演示玩家
player=新精灵(PlayerX、PlayerY、mPlayerTextureRegion);
//将玩家放在游戏屏幕上
mMainScene.attachChild(玩家);
projectileLL=新链接列表();
ProjectleStobeAdded=新建LinkedList();
mMainScene.setOnSceneTouchListener(此);
晚更新世;
}
//这种方法用于射击“子弹”
//需要找到一种基于游戏内库存限制弹药的方法
专用空心射弹(最终浮动pX,最终浮动pY){
intoffx=(int)(pX-player.getX());
intoffy=(int)(pY-player.getY());

如果(offX不幸的是,我只能向您展示我如何使用AndEngine GLES2。虽然我不确定,这在GLES1版本中是否可行。但也许您可以尝试告诉我们您的经验

首先从Git存储库下载TMX Tilemap扩展:

second将您的项目与AndEngineTMXTiledMapExtension项目链接(需要将其标记为库)

当这两个项目链接起来时,您实际上可以像这样使用扩展:

 import org.andengine.extension.tmx.TMXLayer;
 import org.andengine.extension.tmx.TMXLoader;
 import org.andengine.extension.tmx.TMXLoader.ITMXTilePropertiesListener;
 import org.andengine.extension.tmx.TMXProperties;
 import org.andengine.extension.tmx.TMXTile;
 import org.andengine.extension.tmx.TMXTileProperty;
 import org.andengine.extension.tmx.TMXTiledMap;
 import org.andengine.extension.tmx.util.constants.TMXIsometricConstants;
 import org.andengine.extension.tmx.util.exception.TMXLoadException;


 public class YourActivity extends SimpleBaseGameActivity {
     private TMXTiledMap tiledMap;
     private TMXLayer tmxLayer;

     @Override
     protected void onCreateResources() {
       try {
           final TMXLoader tmxLoader = new TMXLoader(getAssets(), getTextureManager(), TextureOptions.NEAREST, getVertexBufferObjectManager(), new ITMXTilePropertiesListener() {
            @Override
            public void onTMXTileWithPropertiesCreated(final TMXTiledMap tmxTiledMap, final TMXLayer tmxLayer, final TMXTile tmxTile, final TMXProperties<TMXTileProperty> tmxTileProperties) {
                    // do stuff with tiles that have properties...
            }
           });
           this.tiledMap = tmxLoader.loadFromAsset("tmx/yourMap.tmx");
           this.tiledMap.setIsometricDrawMethod(TMXIsometricConstants.DRAW_METHOD_ISOMETRIC_CULLING_PADDING);
       } catch (final TMXLoadException e) {
            Debug.e(e);
       }

     }

     @Override
     protected Scene onCreateScene() {
           this.tmxLayer = this.tiledMap.getTMXLayers().get(0);  // the 0 is just an index of the layer. It depends on how many layers you created within Tiled
           attachChild(this.tmxLayer);
     }

 }
import org.andengine.extension.tmx.TMXLayer;
导入org.andengine.extension.tmx.TMXLoader;
导入org.andengine.extension.tmx.TMXLoader.itmxtileProperties Listener;
导入org.andengine.extension.tmx.TMXProperties;
导入org.andengine.extension.tmx.TMXTile;
导入org.andengine.extension.tmx.TMXTileProperty;
导入org.andengine.extension.tmx.TMXTiledMap;
导入org.andengine.extension.tmx.util.constants.TMXIsometricConstants;
导入org.andengine.extension.tmx.util.exception.tmxloadeexception;
公共类YourActivity扩展了SimpleBaseGameActivity{
私有TMXTiledMap tiledMap;
专用TMXLayer TMXLayer;
@凌驾
受保护的void onCreateResources(){
试一试{
final TMXLoader TMXLoader=新TMXLoader(getAssets(),getTextureManager(),TextureOptions.NEAREST,getVertexBufferObjectManager(),new ITMXTileProperties Listener()){
@凌驾
已创建公用无效ontmxTileWithProperties(最终TMXTiledMap TMXTiledMap、最终TMXLayer TMXLayer、最终TMXTile TMXTile、最终TMXProperties tmxTileProperties){
//使用具有属性的瓷砖进行填充。。。
}
});
this.tiledMap=tmxLoader.loadFromAsset(“tmx/yourMap.tmx”);
这是瓷砖
 import org.andengine.extension.tmx.TMXLayer;
 import org.andengine.extension.tmx.TMXLoader;
 import org.andengine.extension.tmx.TMXLoader.ITMXTilePropertiesListener;
 import org.andengine.extension.tmx.TMXProperties;
 import org.andengine.extension.tmx.TMXTile;
 import org.andengine.extension.tmx.TMXTileProperty;
 import org.andengine.extension.tmx.TMXTiledMap;
 import org.andengine.extension.tmx.util.constants.TMXIsometricConstants;
 import org.andengine.extension.tmx.util.exception.TMXLoadException;


 public class YourActivity extends SimpleBaseGameActivity {
     private TMXTiledMap tiledMap;
     private TMXLayer tmxLayer;

     @Override
     protected void onCreateResources() {
       try {
           final TMXLoader tmxLoader = new TMXLoader(getAssets(), getTextureManager(), TextureOptions.NEAREST, getVertexBufferObjectManager(), new ITMXTilePropertiesListener() {
            @Override
            public void onTMXTileWithPropertiesCreated(final TMXTiledMap tmxTiledMap, final TMXLayer tmxLayer, final TMXTile tmxTile, final TMXProperties<TMXTileProperty> tmxTileProperties) {
                    // do stuff with tiles that have properties...
            }
           });
           this.tiledMap = tmxLoader.loadFromAsset("tmx/yourMap.tmx");
           this.tiledMap.setIsometricDrawMethod(TMXIsometricConstants.DRAW_METHOD_ISOMETRIC_CULLING_PADDING);
       } catch (final TMXLoadException e) {
            Debug.e(e);
       }

     }

     @Override
     protected Scene onCreateScene() {
           this.tmxLayer = this.tiledMap.getTMXLayers().get(0);  // the 0 is just an index of the layer. It depends on how many layers you created within Tiled
           attachChild(this.tmxLayer);
     }

 }