使用AndEngine开发游戏之二

萝らか妹 提交于 2020-03-24 07:49:52

3 月,跳不动了?>>>

    看完例子熟悉了基本以后就可以开始制作游戏了。

    游戏的具体代码我就不贴了,有兴趣可以到我Github上看。下面说一下一些注意的事项

一、声音

    1. 背景音乐

        作为背景音乐就应该是循环播放的,注意这里是背景音乐,不是背景声音。。。(只有音乐才可以循环播放,我就在这里吃过亏)。

     2. 声效。。这个应该没有什么难的

    首先,在onCreateEngineOptions()方法里面加点东西


@Override
public EngineOptions onCreateEngineOptions() {
	this.mCamera = new Camera(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);

	final EngineOptions engineOptions = new EngineOptions(true,ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(SCREEN_WIDTH, SCREEN_HEIGHT), this.mCamera);
	engineOptions.getAudioOptions().setNeedsSound(true);
	engineOptions.getAudioOptions().setNeedsMusic(true);
	return engineOptions;
}



engineOptions.getAudioOptions().setNeedsSound(true);
engineOptions.getAudioOptions().setNeedsMusic(true);


这两句分别是设置使用声音和音乐。


    在onCreateResources()方法中加载声音和音乐,如下

// 加载声音
		SoundFactory.setAssetBasePath("mfx/");
		MusicFactory.setAssetBasePath("mfx/");
		try {
			this.mBaseMusic = MusicFactory.createMusicFromAsset(
					this.getMusicManager(), this, "base.wav");
			this.mBombSound = SoundFactory.createSoundFromAsset(
					this.getSoundManager(), this, "bomb.wav");
		} catch (IOException e) {
			e.printStackTrace();
		}


    音乐循环播放使用setLoop(true),可以实现音乐循环播放


this.mBaseMusic.play();
this.mBaseMusic.setLooping(true);

    播放声音,跟音乐差不多



mBombSound.play();


二、物理碰撞监听器

    上一篇说了如何注册物理世界,现在说一下如何监听碰撞事件。


this.mPhysicsWorld.setContactListener(new ContactListener() {
			
			@Override
			public void preSolve(Contact contact, Manifold oldManifold) {}
			
			@Override
			public void postSolve(Contact contact, ContactImpulse impulse) {}
			
			@Override
			public void endContact(Contact contact) {}
			
			@Override
			public void beginContact(Contact contact) { 
			    // TODO
			}
		});

    在beginContact(Contact contact)方法中可以实现碰撞所触发的事件。

Body bodyA = contact.getFixtureA().getBody();
Body bodyB = contact.getFixtureB().getBody();

    这样可以获取碰撞的两物体。bodyA是碰撞方,bodyB是被碰撞方。如果需要确定bodyA和bodyB的身份,可以在新建Body的时候使用setUserData方法,然后在检测的时候使用getUserData获取数据,以此来获得碰撞物体的身份。

三、从一个GameActivity跳转到另一个GameActivity

    我在这里是纠结最久的,最后在github上提问,有一位外国朋友(应该是外国的。。。吧)发了个Demo给我才知道自己是死在哪里。

    假如我要从LevelOneGame跳转到LevelTwoGame(都是设置横屏的),其实在代码上跟普通Activity跳转没有分别。但是在AndroidManifest.xml则是用一个要注意的地方。

标注LevelTwoGame如下

<activity android:name=".LevelTwoGame" android:configChanges="orientation|screenSize" />

注意,一定要android:configChanges="orientation|screenSize"这句,否则会报错。至于原因我还没有查到,应该跟Activity的启动方式有关。


                                                                                                                            。。。完


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!