libgdx游戏引擎教程(五)多游戏界面的实现(一)附源码
转自:http://www.apkbus.com/android-57936-1-1.html 今天是#Testin杯#Mkey libgdx教程的第五讲,在第二讲我就曾经对大家承诺过写一个关于Libgdx内多屏幕显示的内容,可是我脑子一时糊涂竟然忘了这事,这里向大家道歉,今天这一讲我们就来八一八libgdx中的多游戏容器的实现。我在我的Libgdx教程中尽量给大家介绍一些实用的功能,至于
转自:http://www.apkbus.com/android-57936-1-1.html
今天是#Testin杯#Mkey libgdx教程的第五讲,在第二讲我就曾经对大家承诺过写一个关于Libgdx内多屏幕显示的内容,可是我脑子一时糊涂竟然忘了这事,这里向大家道歉,今天这一讲我们就来八一八libgdx中的多游戏容器的实现。我在我的Libgdx教程中尽量给大家介绍一些实用的功能,至于那些libgdx API基本的使用方法则不过多侧重,想来大家通过查询API文档也能掌握。这里再提醒一下大家,API文档可以在官网上看到,也可以在下载下来的libgdx包中的docs下的index.html中查看。
java.lang.Object
| Activity
|com.badlogic.gdx.backends.android.AndroidApplication
- public class ActivityForSwitch extends Activity {
- Button switchbutton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- switchbutton=(Button)findViewById(R.id.button1);
- switchbutton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intent=new Intent();
- intent.setClass(ActivityForSwitch.this,LibgdxActivity.class);
- ActivityForSwitch.this.startActivity(intent);
- }
- });
- }
- }
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="edu.nju.wsj.libgdx"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="7"
- android:targetSdkVersion="15" />
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="edu.nju.wsj.libgdx.ActivityForSwitch"
- android:screenOrientation="landscape"
- android:configChanges="keyboardHidden|orientation"
- android:label="@string/title_activity_main" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity
- android:screenOrientation="landscape"
- android:configChanges="keyboardHidden|orientation"
- android:name=".LibgdxActivity" >
- </activity>
- </application>
- </manifest>
public abstract classGameextends java.lang.ObjectimplementsApplicationListener
public interfaceScreen
同样看看它的方法
我们发现,Screen是一个接口,就像我们直接实现ApplicationListener一样,它也有dispose(),pause(),render()方法,但是它还多了hide(),show()等方法(顾名思义,就是在显示和隐藏时分别调用)。现在大家应该已经明白一些了,那么我们再用一张图来表示,相信大家就更明白了:
- public class ApplicationGame extends Game {
- private Screen sc;
- public void create() {
- // TODO Auto-generated method stub
- setScreen(sc);
- }
- public ApplicationGame(Screen sc) {
- super();
- this.sc=sc;
- // TODO Auto-generated constructor stub
- }
- @Override
- public void resume() {
- // TODO Auto-generated method stub
- super.resume();
- }
- }
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="edu.nju.wsj.libgdx"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="7"
- android:targetSdkVersion="15" />
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="edu.nju.wsj.libgdx.LibgdxActivity"
- android:screenOrientation="landscape"
- android:configChanges="keyboardHidden|orientation"
- android:label="@string/title_activity_main" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity
- android:screenOrientation="landscape"
- android:configChanges="keyboardHidden|orientation"
- android:name=".ActivityForSwitch" >
- </activity>
- </application>
- </manifest>
- public class Progress implements Screen{
- ProgressBar bar;
- AnimalActor animal;
- Stage stage;
- AssetManager manager;
- boolean hasini;
- @Override
- public void hide() {
- // TODO Auto-generated method stub
- }
- @Override
- public void render(float arg0) {
- // TODO Auto-generated method stub
- Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
- Gdx.gl.glClearColor(1f,1f,1f,0f);
- stage.act(Gdx.graphics.getDeltaTime());
- stage.draw();
- if(!manager.update()){
- bar.setProgress(manager.getProgress()*100);
- }
- //加载完成且之前没有初始化过AnimalActor,且在手触摸屏幕时初始化AnimalActor,并将进度条从舞台中移除,并加入AnimalActor对象
- if(!hasini&&manager.update()){
- bar.setProgress(100);
- if(Gdx.input.isTouched()){
- stage.removeActor(bar);
- animal.iniResource();
- stage.addActor(animal);
- hasini=true;
- }
- }
- //我们做一个标记,看看未加载(Queued)完成的资源和已加载完成的资源的数量(Loaded)
- if(!manager.update()){
- System.out.println("QueuedAssets:"+manager.getQueuedAssets());
- System.out.println("LoadedAssets:"+manager.getLoadedAssets());
- System.out.println("Progress:"+manager.getProgress());
- }
- }
- @Override
- public void resize(int arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void resume() {
- // TODO Auto-generated method stub
- }
- @Override
- public void show() {
- // TODO Auto-generated method stub
- bar=new ProgressBar(0,0);
- //新建一个舞台
- stage=new Stage(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(), true);
- stage.addActor(bar);
- //记得初始化一下AssetManager实例
- manager=new AssetManager();
- //传入AssetManger的引用,便于animal的资源初始化,但是注意了,只有在调用iniResourse()后资源才被初始化
- animal=new AnimalActor(manager);
- //把资源加入加载列表,这里我放了一个29帧的动画,在asset文件夹下animal下有29张图片
- for(int i=1;i<30;i++){
- manager.load("animal/"+i+".png", Texture.class);
- }
- }
- @Override
- public void dispose() {
- // TODO Auto-generated method stub
- //同样的,在结束时释放资源
- bar.dispose();
- animal.dispose();
- manager.clear();
- manager.dispose();
- }
- @Override
- public void pause() {
- // TODO Auto-generated method stub
- }
- }
- 我们最后需要修改LibgdxActivity(AndriodApplication)中的代码,从直接initialize()一个Progress改为initialize()一个Game,这个Game持有一个Screen,即修改过后的Progress类。
- public class LibgdxActivity extends AndroidApplication {
- Progress progress;
- ApplicationGame ag;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- progress=new Progress();
- ag=new ApplicationGame(progress);
- initialize(ag, false);
- }
- }
API和libgdx混用的源码
edu.nju.wsj.libgdx(libgdx和SDK混用的demo).rar(3.52 MB, 下载次数: 177)
修改构架准备实现多界面的源码
edu.nju.wsj.libgd(多界面第一步)x.rar(3.52 MB, 下载次数: 287)
Testin ID:ilovemkey@gmail.com 总的而言这个平台真的非常好用!我正是用这个平台发现了现在写的这个应用的一些内存管理方面的问题。另外建议能够在测试报告中看到某一台机型在整个执行过程中的cpu和内存占用的变化情况,这样可以更快地锁定问题。感谢Itestin让测试变得轻松了太多太多!
更多推荐
所有评论(0)