转自:http://www.apkbus.com/android-60457-1-1.html
本讲源码:
edu.nju.wsj.libgdx.rar(3.8 MB, 下载次数: 126)
今天是该系列教程的第十三讲,也是系列教程的第二十二篇。这两天有巴友经常问我一些问题,其中很多问到了我今天要讲的内容,我就在这里一起分析一下好了。
这一讲我们来具体分析一下一个我们早就接触到的东西,演员类Actor,不过似乎我们都是一直只会简单的使用演员类,我们对Actor的主要工作都集中在draw()函数中,即我们大部分修改都是基于Actor怎么绘制,其实Actor的绘制功能只是其中的一部分,游戏最重要的部分是和用户的交互,即让用户在玩游戏的时候全身心投入,或者说增加用户的粘度。我们如果只在游戏的绘制方面下功夫,这个游戏就好比是动画片,用户只要按下一个按钮就开始看我们辛辛苦苦制作的动画片?以上也是说笑的,但无疑游戏开发中,提高游戏和用户之间的交互应该放在第一位。
- public class ExampleActor extends Actor {
- @Override
- public void draw(SpriteBatch arg0, float arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public Actor hit(float arg0, float arg1) {
- // TODO Auto-generated method stub
- return null;
- }
- }
- public class ExampleActor extends Actor {
- Texture tx;
- String Id;
- @Override
- public void draw(SpriteBatch arg0, float arg1) {
- // TODO Auto-generated method stub
- //根据这个Actor的位置来绘制
- arg0.draw(tx, this.x, this.y);
- }
- @Override
- public Actor hit(float arg0, float arg1) {
- // TODO Auto-generated method stub
- Log.i("Testin","hit"+Id);
- return null;
- }
- @Override
- public boolean touchDown(float x, float y, int pointer) {
- // TODO Auto-generated method stub
- Log.i("Testin","touchDown"+Id);
- return super.touchDown(x, y, pointer);
- }
- @Override
- public void touchDragged(float x, float y, int pointer) {
- // TODO Auto-generated method stub
- Log.i("Testin","touchDragged"+Id);
- super.touchDragged(x, y, pointer);
- }
- @Override
- public boolean touchMoved(float x, float y) {
- // TODO Auto-generated method stub
- Log.i("Testin","touchMoved"+Id);
- return super.touchMoved(x, y);
- }
- @Override
- public void touchUp(float x, float y, int pointer) {
- // TODO Auto-generated method stub
- Log.i("Testin","touchUp"+Id);
- super.touchUp(x, y, pointer);
- }
- public ExampleActor(int x,int y,String Id) {
- super();
- //对坐标进行初始化
- this.x=x;
- this.y=y;
- this.Id=Id;
- //对纹理对象进行初始化,资源文件放在assets文件下
- tx=new Texture(Gdx.files.internal("actor.png"));
- }
- }
- ExampleActor example;
- example=new ExampleActor(100, 100,"1");
- stage.addActor(example);
看一下运行效果:

- <span lang="EN-US" style="font-size:10.0pt;font-family:
- "Courier New";mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;
- color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US;mso-fareast-language:
- ZH-CN;mso-bidi-language:AR-SA">ExampleActor </span><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-font-family:宋体;
- mso-fareast-theme-font:minor-fareast;color:#0000C0;mso-font-kerning:0pt;
- mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">example2</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-font-family:
- 宋体;mso-fareast-theme-font:minor-fareast;color:black;mso-font-kerning:0pt;
- mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">;</span>
- Example2=new ExampleActor(200, 200,"2");
- stage.addActor(example2);
- Log.i("Testin","x:"+arg0+" y:"+arg1);
- return this;
- @Override
- public Actor hit(float arg0, float arg1) {
- // TODO Auto-generated method stub
- Log.i("Testin","hit"+Id);
- Log.i("Testin","x:"+arg0+" y:"+arg1);
- if(arg0>0&&arg1>0&&arg0<tx.getWidth()&&arg1<tx.getHeight())
- return this;
- return null;
- }

- @Override
- public boolean touchDown(float x, float y, int pointer) {
- // TODO Auto-generated method stub
- Log.i("Testin","touchDown"+Id);
- // return super.touchDown(x, y, pointer);
- return true;
- }
这些都验证了我们之前的猜测。
抱歉,这里忘了和大家说了,touchMoved是libgdx在PC上运行的时候才响应的,因为Libgdx是一个跨平台的引擎,在Android里是不起作用的。