Android游戏引擎《Rokon》学习笔记五:Modifiers修饰类的使用

来源:互联网 发布:山东出版社行知天下 编辑:程序博客网 时间:2024/05/21 19:32

欢迎来到第四篇Rokon教程()

在本教程里 ,你将会学习怎样添加使用Modifiers修饰类。

假定你已经有了一定的Java编程、Android编程的基础,如果没有,来这里(需翻墙,方法略)。

在这个教程里我将会用Eclipse作为开发工具,如果你用其他的开发工具,照样可以继续阅读。

我们继续上一节的教程,所以假定你已经学习过上一节的内容并且已经建立一个Rokon项目了。

(在教程的最后你将会下载到所涉及到的源码)

你可以给Sprite添加一个修饰类,添加一些临时的效果。比如被攻击时显示红色闪动效果。

打开Eclipse进入到Rokon项目里。

新建一个ColorModifier.java类。

我倾向于吧所有的修饰类放到一个独立的包中来保持项目的有组织性。但这是可选的。

ColorModifier.java类如下:

view plain
  1. package com.rokonexamples.modifier.modifiers;  
  2. import com.stickycoding.rokon.Modifier;  
  3. import com.stickycoding.rokon.Sprite;  
  4. public class ColorModifier extends Modifier {  
  5.     private float color;  
  6.     @Override  
  7.     public void onStart(Sprite sprite) {  
  8.         color = 0;  
  9.     }  
  10.     @Override  
  11.     public void onUpdate(Sprite sprite) {  
  12.         // Here you can do anything to the sprite, like move it or whatever.  
  13.         // But we will just do a simple color modification.  
  14.         sprite.setRGB(1, color, color);  
  15.         color += 0.1;  
  16.         // When the sprite's original colors has been restored, end it.  
  17.         if (color >= 1)  
  18.             end();  
  19.     }  
  20.     @Override  
  21.     public void onEnd(Sprite sprite) {  
  22.         sprite.setRGB(111);  
  23.     }  
  24. }  
modifier是如何建立的呢:

'onStart()'  modifier 开始时此方法被调用。你也可以爱这里重置。

'onUpdate()' 当modifier为活动时,此方法每一帧都会被调用。

你可以这样修饰你的Sprites:

sprite.setRGB(1, color, color);

这个语句的作用是改变Sprite的颜色。 (1, 1, 1) 为正常的颜色。(0, 0, 0) 则完全为黑色。

这个modifier的作用是设置sprite为红色。一段时间后恢复正常色。

当恢复到正常色后,modifier修饰类会把自己从sprite类删除,然后调用end()方法。

sprite.setRGB(1, 1, 1);

恢复sprite到正常的颜色。

好了,现在把这个modifier添加到sprite上。

打开你的GameScene类,替换如下:

view plain
  1. package com.rokonexamples.modifier;  
  2. import android.view.MotionEvent;  
  3. import com.rokonexamples.modifier.modifiers.ColorModifier;  
  4. import com.stickycoding.rokon.Scene;  
  5. import com.stickycoding.rokon.Sprite;  
  6. import com.stickycoding.rokon.background.FixedBackground;  
  7. public class GameScene extends Scene {  
  8.     private FixedBackground background;  
  9.     private Sprite bob;  
  10.     private ColorModifier modifier;  
  11.     public GameScene() {  
  12.         super(11);  
  13.         setBackground(background = new FixedBackground(Textures.background));  
  14.         // Create the Bob sprite  
  15.         bob = new Sprite(100220, Textures.bob.getWidth(), Textures.bob.getHeight());  
  16.         bob.setTexture(Textures.bob);  
  17.         // Add the Bob sprite to the first layer.  
  18.         add(0, bob);  
  19.         // And create the modifier.  
  20.         modifier = new ColorModifier();  
  21.     }  
  22.     @Override  
  23.     public void onGameLoop() {  
  24.     }  
  25.     @Override  
  26.     public void onTouchUp(float x, float y, MotionEvent event, int pointerCount, int pointerId) {  
  27.         // Add your modifier to the sprite.  
  28.         bob.addModifier(modifier);  
  29.     }  
  30.     @Override  
  31.     public void onPause() {  
  32.     }  
  33.     @Override  
  34.     public void onResume() {  
  35.     }  
  36.     @Override  
  37.     public void onReady() {  
  38.     }  
  39. }  
 现在这个类势必以前多了两行:

modifier = new ColorModifier();
bob.addModifier(modifier);

他们的作用非常明显,第一句建立,第二句添加到精灵类每次当你触摸屏幕的时候。

需要记住的是,modifier一旦被创建可以重复利用。

如果你每次都新生成modifier到你的sprite里,那么会给gc带来很大的工作量,游戏也会有些停滞的感觉。

(或许你不会注意到这个小差异)

好了,如果你运行这个程序,每次按下屏幕的时候,你的精灵会变红。

如果一切正常你将会看到(略)