导读:
在Cocos2d中,创建一个精灵有多种方式,其中最常用的就是用图片来创建,但是如果精灵很多,比如愤怒的小鸟游戏中每一个可动的物体都是一个精灵,如果一个精灵用一张图片,那么每次创建一个精灵时都要重新载入一张图片,这样会导致游戏画面不流畅,最好的方法,就是在游戏开始之前先加载这些图片,各种游戏开始之前的loading正是在加载图片、音乐等资源。
cocos2d中的解决方式:先把各个小精灵的图片放到一张大图里,再建立一张plist表记录各个精灵图片在大图中的位置,当需要精灵图片时,只需要从这张大图里面取出对应图片即可,这样就只需要在游戏开始之前载入这一张大图即可,优点是不会快速,不用每次都载入图片。
注意事项:
1.plist目录文件的名称和大图名称相同,如picture.png对应picture.plist.
2.plist文件和大图文件的合成使用合成工具TexturePacker.下一篇介绍.
3.用到资源:一张大图picture.png(包含3个精灵);对应plist文件picture.plist
注:图中的精灵图片依次为character1.png、character2.png、character3.png,被整合到一张图里,使用TexturePacker合成工具
使用方法:
1.MainActivity.java
这是创建Cocos2d游戏场景的基本方法,我就不解释了,编译要导入lib库文件,没有接触过Cocos2d 的读者,强烈建议学习下列教学视频
http://www.mobiletrain.org/about/news/android_video3.html
package org.wp.cc01plist;
import org.cocos2d.layers.CCScene;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.opengl.CCGLSurfaceView;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity {
private CCGLSurfaceView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隐藏程序标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 隐藏标志栏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
view = new CCGLSurfaceView(this);
setContentView(view);
CCDirector director = CCDirector.sharedDirector();
director.attachInView(view);
director.setDisplayFPS(true);
director.setAnimationInterval(1 / 60.0f);
CCScene scene = CCScene.node();
GameLayer layer = new GameLayer();
scene.addChild(layer);
director.runWithScene(scene);
}
@Override
protected void onResume() {
CCDirector.sharedDirector().resume();
super.onResume();
}
@Override
protected void onPause() {
CCDirector.sharedDirector().pause();
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
2.GameLayer.java
package org.wp.cc01plist;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.nodes.CCSpriteFrameCache;
import org.cocos2d.nodes.CCSpriteSheet;
public class GameLayer extends CCLayer {
protected GameLayer() {
// 读取缓存图片和plist表
CCSpriteFrameCache cache = CCSpriteFrameCache.sharedSpriteFrameCache();
cache.addSpriteFrames("texturetest.plist");
CCSpriteSheet sheet = CCSpriteSheet.spriteSheet("texturetest.png");
// 载入缓存
this.addChild(sheet);
// 用精灵表图片里面的character1.png创建精灵1
CCSprite sp1 = CCSprite.sprite(cache.getSpriteFrame("character1.png"));
// 设置精灵位置
sp1.setPosition(200, 200);
// 加入精灵到布景层中
this.addChild(sp1);
CCSprite sp2 = CCSprite.sprite(cache.getSpriteFrame("character2.png"));
sp2.setPosition(200, 400);
this.addChild(sp2);
CCSprite sp3 = CCSprite.sprite(cache.getSpriteFrame("character3.png"));
sp3.setPosition(200, 600);
this.addChild(sp3);
}
}
运行效果:
可以看到,三个精灵出现在屏幕指定位置了。。
结语: