0
저는 게임 개발을 처음 접했고 AndEngine을 통해 레이싱 게임을 만들려고했습니다. 내 스프라이트 (자동차)가 동전과 충돌하면 소리가 나고 사라집니다.
타일링 된 맵 편집기를 사용하여 동전 오브젝트를로드했습니다.
지도와 x 축을위한 xml을 생성하는 바둑판 식 배열 편집기의 좌표계가 반전됩니다. 나는 tmxExtension이이 변환을 처리 할 것이라고 생각했습니다. 지금까지 각 객체 위치를 계산하고 위치를 수정하기 위해 XML 편집기에서 위치를 변경했습니다. 다른 쉬운 방법이 있습니까? 나는 동전 충돌 그러나 모든 동전 '충돌이 감지되지 Andengine 코인 픽업 nullpointer 예외
public void beginContact(Contact contact) {
Body a = null, b = null;
// TODO Auto-generated method stub
try {
a = contact.getFixtureA().getBody();
b = contact.getFixtureB().getBody();
} catch (NullPointerException n) {
//do nothing
}
if (a != null && b != null) {
if (a.getUserData() != null && b.getUserData() != null) {
if (a.getUserData().equals("player") && b.getUserData().equals("coin") || b.getUserData().equals("player") && a.getUserData().equals("coin")) {
if (a.getUserData().equals("coin")) {
removeCoins(a);
resourcesManager.coinCollect.play();
addToScore(10);
showLevelCleared();
} else if (b.getUserData().equals("coin")) {
removeCoins(b);
resourcesManager.coinCollect.play();
addToScore(5);
}
}
}
}
}
을 관리하기 위해 접촉 리스너를 사용, 또한
private void createLevel() {
coins = new LinkedList <Sprite>();
try {
final TMXLoader tmxLoader = new TMXLoader(activity.getAssets(), engine.getTextureManager(),
TextureOptions.BILINEAR_PREMULTIPLYALPHA, vbom);
this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/uom_map_test2.tmx");
} catch (final TMXLoadException e) {
Debug.e(e);
}
FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f);
Rectangle rect1 = new Rectangle(
0,
0,
1,
camera.getBoundsYMax(),
vbom);
Body wall1 = PhysicsFactory.createBoxBody(physicsWorld, rect1, BodyType.StaticBody, wallFixtureDef);
wall1.setUserData(wall1);
FixtureDef wallFixtureDef2 = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f);
Rectangle rect2 = new Rectangle(
1100,
0,
1,
camera.getBoundsYMax(),
vbom);
Body wall2 = PhysicsFactory.createBoxBody(physicsWorld, rect2, BodyType.StaticBody, wallFixtureDef2);
for (final TMXObjectGroup group: this.mTMXTiledMap.getTMXObjectGroups()) {
for (final TMXObject object: group.getTMXObjects()) {
if (object.getName().equals("coin")) {
Sprite coin = new Sprite(object.getX(), object.getY(), object.getWidth(), object.getHeight(), resourcesManager.coinTextureRegion, vbom);
FixtureDef coinFixtureDef = PhysicsFactory.createFixtureDef(0, 0.3f, 0.3f);
Body bod = PhysicsFactory.createBoxBody(physicsWorld, coin, BodyType.DynamicBody, coinFixtureDef);
bod.setUserData("coin");
coins.add(coin);
coin.setUserData(bod);
} else if (object.getName().equals("sea")) {
FixtureDef seaFixtureDef = PhysicsFactory.createFixtureDef(0, 0, 0f);
Rectangle rect = new Rectangle(
object.getX(),
object.getY(),
object.getWidth(),
object.getHeight(),
vbom);
Body bod = PhysicsFactory.createBoxBody(physicsWorld, rect, BodyType.DynamicBody, seaFixtureDef);
bod.setUserData("sea");
}
}
}
/*for(TMXLayer layer : this.mTMXTiledMap.getTMXLayers()){
layer.detachSelf();
layer.setPosition(0,0);
attachChild(layer);*/
for (int layerID = 0; layerID < this.mTMXTiledMap.getTMXLayers().size(); layerID++) {
this.mTMXTiledMap.getTMXLayers().get(layerID).detachSelf();
attachChild(this.mTMXTiledMap.getTMXLayers().get(layerID));
// layer0:sea layer1:grass layer2:road
for (int i = 0; i < coins.size(); i++) {
this.attachChild(coins.get(i));
}
camera.setBounds(0, 0, mTMXTiledMap.getWidth(), mTMXTiledMap.getHeight());
camera.setBoundsEnabled(true);
}
}
: 여기
지도를로드하는 내 코드입니다. 그 때문에 null 포인터를 얻습니다. 그래서 catch를 포함 시켰습니다.이유가 무엇인가요?
logcat을 포함시킬 수 있습니까? – tim687
tim687 : 동전 감지를 위해 내가 코드를 변경하고 시체를 만들고 플레이어와의 충돌시 시체를 제거하는 대신 타이머 핸들러를 사용하여 player.collideswith (동전)와 충돌을 확인하고 완벽하게 작동합니다. 그러나, 나는 여전히 GLes 2-anchor center에서 좌표 변환을위한 더 쉬운 해결책을 찾지 못했습니다. – GoonzAks