Java 为什么播放机没有在AndEngine中显示TMX文件?
我正在用AnEngine GLES2 AnchorCenter开发一个2d platformer游戏…我有6个关卡,任何关卡都有一个Tmx文件(平铺)…我可以加载Tmx文件,但玩家不显示在屏幕上…我想玩家在第一个平台上,然后跳到另一个平台上,但我不知道怎么做 这是我的密码。。。 请帮帮我。 谢谢 TMX文件:Java 为什么播放机没有在AndEngine中显示TMX文件?,java,andengine,tmx,Java,Andengine,Tmx,我正在用AnEngine GLES2 AnchorCenter开发一个2d platformer游戏…我有6个关卡,任何关卡都有一个Tmx文件(平铺)…我可以加载Tmx文件,但玩家不显示在屏幕上…我想玩家在第一个平台上,然后跳到另一个平台上,但我不知道怎么做 这是我的密码。。。 请帮帮我。 谢谢 TMX文件: <?xml version="1.0" encoding="UTF-8"?> <map version="1.0" orientation="orthogonal" re
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="500" height="50" tilewidth="20" tileheight="20" nextobjectid="16">
<tileset firstgid="1" name="map_tiles" tilewidth="20" tileheight="20" tilecount="48">
<image source="gfx/game/map_tiles.png" width="128" height="160"/>
</tileset>
<layer name="Tile Layer 1" width="500" height="50">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAC+3YOxLCMAxAQU8qE44AZwDuf7qoYUhpM/nIky22tjrpeSqlTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEm8wjt8EswCAAAAnMcfAQAAAPzoZACglbsBAAAA+mhpAODLXQAAAADbaelsLQ4AZFbDLczhnmAeANjKaD1uJwMAAMA+NDcAjMHOBgAycJMAcCVH7r26sn6zNrCbAQAAGJ2+BQAAgP3pbwAAADiGBgcAAAAAgH7+1wEAAAAA4D+P8EwwBwAAAFyJHgcAAAAAgH7+1wEAAOA8C3BZGU2ghgEA
</data>
</layer>
<objectgroup name="Object Layer 1" width="500" height="50">
<properties>
<property name="sp" value="true"/>
</properties>
<object id="1" x="19" y="280" width="61" height="20"/>
<object id="2" x="80" y="361" width="60" height="20"/>
<object id="13" x="419" y="760"/>
</objectgroup>
<objectgroup name="Object Layer 2" width="500" height="50">
<properties>
<property name="su" value="true"/>
</properties>
<object id="6" x="441" y="479" width="59" height="21"/>
<object id="7" x="541" y="439" width="59" height="21"/>
</objectgroup>
</map>
如果你没有加载TMX层,你的播放器还会显示吗?如果是这样,请尝试将播放器上的z索引设置为喜欢3,例如
player.setZIndex(3)
@sij_a如果我没有加载TMX层,则会显示播放器…我使用setZIndex(),但没有显示。当我没有在player类(createPhysics)中创建物理时,会显示播放器。有什么问题吗?在physicconnector
onUpdate
方法中,您有一个if语句,它将getY()
作为条件。它的Y值是多少?你能删除那个if语句并看看它是否有效吗?
public abstract class Player extends AnimatedSprite {
// ---------------------------------------------
// VARIABLES
// ---------------------------------------------
public Body body;
public boolean canRun = false;
private int footContacts = 0;
// ---------------------------------------------
// CONSTRUCTOR
// ---------------------------------------------
public Player(float pX, float pY, VertexBufferObjectManager vbo,
Camera camera, PhysicsWorld physicsWorld) {
super(pX, pY, ResourceManager.getInstance().player_region, vbo);
createPhysics(camera, physicsWorld);
camera.setChaseEntity(this);
}
// ---------------------------------------------
// CLASS LOGIC
// ---------------------------------------------
private void createPhysics(final Camera camera, PhysicsWorld physicsWorld) {
body = PhysicsFactory.createBoxBody(physicsWorld, this,
BodyType.DynamicBody, PhysicsFactory.createFixtureDef(0, 0, 0));
body.setUserData("player");
body.setFixedRotation(true);
physicsWorld.registerPhysicsConnector(new PhysicsConnector(this, body,
true, false) {
@Override
public void onUpdate(float pSecondsElapsed) {
super.onUpdate(pSecondsElapsed);
camera.onUpdate(0.1f);
if (getY() <= 0) {
onDie();
}
if (canRun) {
body.setLinearVelocity(new Vector2(5, body
.getLinearVelocity().y));
}
}
});
}
public void setRunning() {
canRun = true;
final long[] PLAYER_ANIMATE = new long[] { 100, 100, 100 };
animate(PLAYER_ANIMATE, 0, 2, true);
}
public void jump() {
if (footContacts < 1) {
return;
}
body.setLinearVelocity(new Vector2(body.getLinearVelocity().x, 11));
}
public void increaseFootContacts() {
footContacts++;
}
public void decreaseFootContacts() {
footContacts--;
}
public abstract void onDie();
}
public void loadLevel(int levelID) {
try {
mTmxLoader = new TMXLoader(activity.getAssets(),
engine.getTextureManager(), TextureOptions.NEAREST, vbom);
mTMXTiledMap = mTmxLoader.loadFromAsset("tmx/level" + levelID
+ ".tmx");
} catch (final TMXLoadException tmxle) {
Debug.e(tmxle);
}
createObjects(mTMXTiledMap);
final TMXLayer tmxLayer = this.mTMXTiledMap.getTMXLayers().get(0);
mTMXTiledMap.detachChild(tmxLayer);
this.attachChild(tmxLayer);
/* Make the camera not exceed the bounds of the TMXEntity. */
resourceManager.camera.setBounds(0, 0, tmxLayer.getHeight(),
tmxLayer.getWidth());
resourceManager.camera.setBoundsEnabled(true);
/*
* Calculate the coordinates for the face, so its centered on the
* camera.
*/
final float centerX = (resourceManager.CAMERA_WIDTH - resourceManager.player_region
.getWidth()) / 2;
final float centerY = (resourceManager.CAMERA_HEIGHT - resourceManager.player_region
.getHeight()) / 2;
/* Create the sprite and add it to the scene. */
player = new Player(centerX, centerY, vbom, camera, physicsWorld) {
@Override
public void onDie() {
// TODO Auto-generated method stub
// if (!gameOverDisplayed
// && playerDie == false) {
//
// displayGameOverText();
// }
}
};
this.attachChild(player);
}
public void createObjects(TMXTiledMap map) {
final FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(0,
0.01f, 0.5f);
// Loop through the object groups
for (final TMXObjectGroup group : map.getTMXObjectGroups()) {
if (group.getTMXObjectGroupProperties().containsTMXProperty(
"sp", "true")) {
// This is our "wall" layer. Create the boxes from it
for (final TMXObject object : group.getTMXObjects()) {
final Rectangle rect = new Rectangle(object.getX(),
object.getY(), object.getWidth(),
object.getHeight(), vbom);
final Body body = PhysicsFactory.createBoxBody(
physicsWorld, rect, BodyType.StaticBody,
boxFixtureDef);
rect.setVisible(true);
this.attachChild(rect);
body.setUserData("sp");
}
} else if (group.getTMXObjectGroupProperties().containsTMXProperty(
"su", "true")) {
// This is our "wall" layer. Create the boxes from it
for (final TMXObject object : group.getTMXObjects()) {
final Rectangle rect = new Rectangle(object.getX(),
object.getY(), object.getWidth(),
object.getHeight(), vbom);
final Body body = PhysicsFactory.createBoxBody(
physicsWorld, rect, BodyType.StaticBody,
boxFixtureDef);
rect.setVisible(true);
this.attachChild(rect);
body.setUserData("su");
}
} else if (group.getTMXObjectGroupProperties().containsTMXProperty(
"fa", "true")) {
// This is our "wall" layer. Create the boxes from it
for (final TMXObject object : group.getTMXObjects()) {
final Rectangle rect = new Rectangle(object.getX(),
object.getY(), object.getWidth(),
object.getHeight(), vbom);
final Body body = PhysicsFactory.createBoxBody(
physicsWorld, rect, BodyType.StaticBody,
boxFixtureDef);
rect.setVisible(true);
this.attachChild(rect);
body.setUserData("fa");
}
} else if (group.getTMXObjectGroupProperties().containsTMXProperty(
"win", "true")) {
// This is our "wall" layer. Create the boxes from it
for (final TMXObject object : group.getTMXObjects()) {
final Rectangle rect = new Rectangle(object.getX(),
object.getY(), object.getWidth(),
object.getHeight(), vbom);
final Body body = PhysicsFactory.createBoxBody(
physicsWorld, rect, BodyType.StaticBody,
boxFixtureDef);
rect.setVisible(true);
this.attachChild(rect);
body.setUserData("win");
}
}
}
}
private ContactListener contactListener() {
ContactListener contactListener = new ContactListener() {
public void beginContact(Contact contact) {
final Fixture x1 = contact.getFixtureA();
final Fixture x2 = contact.getFixtureB();
if (x1.getBody().getUserData() != null
&& x2.getBody().getUserData() != null) {
if (x2.getBody().getUserData().equals("player")) {
player.increaseFootContacts();
}
if (x1.getBody().getUserData().equals("su")
&& x2.getBody().getUserData().equals("player")) {
engine.registerUpdateHandler(new TimerHandler(0.4f,
new ITimerCallback() {
public void onTimePassed(
final TimerHandler pTimerHandler) {
pTimerHandler.reset();
engine.unregisterUpdateHandler(pTimerHandler);
x1.getBody().setType(
BodyType.DynamicBody);
}
}));
}
if (x1.getBody().getUserData().equals("fa")
&& x2.getBody().getUserData().equals("player")) {
engine.registerUpdateHandler(new TimerHandler(0.2f,
new ITimerCallback() {
public void onTimePassed(
final TimerHandler pTimerHandler) {
pTimerHandler.reset();
engine.unregisterUpdateHandler(pTimerHandler);
x1.getBody().setType(
BodyType.DynamicBody);
}
}));
}
if (x1.getBody().getUserData().equals("wi")
&& x2.getBody().getUserData().equals("player")) {
engine.registerUpdateHandler(new TimerHandler(0.1f,
new ITimerCallback() {
public void onTimePassed(
final TimerHandler pTimerHandler) {
pTimerHandler.reset();
engine.unregisterUpdateHandler(pTimerHandler);
x1.getBody().setType(
BodyType.DynamicBody);
}
}));
}
if (x1.getBody().getUserData().equals("levelDeadEnd")
&& x2.getBody().getUserData().equals("player")) {
x2.getBody().setType(BodyType.StaticBody);
}
}
}
public void endContact(Contact contact) {
final Fixture x1 = contact.getFixtureA();
final Fixture x2 = contact.getFixtureB();
if (x1.getBody().getUserData() != null
&& x2.getBody().getUserData() != null) {
if (x2.getBody().getUserData().equals("player")) {
player.decreaseFootContacts();
}
}
}
public void preSolve(Contact contact, Manifold oldManifold) {
}
public void postSolve(Contact contact, ContactImpulse impulse) {
}
};
return contactListener;
}