android之cocos2d游戏基础篇

最近公司接了一个软控硬的项目,里面有几个游戏,因为之前一直在做应用,从没有接触过游戏这块。所以很苦逼!只能从头开始学习游戏开发,幸好有开源的东西,这里就整理下。

我是从cocos2D-x-android开始的,至于什么是cocos2D-x-android我也不就多说了,自己百度百科吧。下面我们就开始。笔记有点啰嗦,勿怪。

首先我们先谈下游戏开发和应用有什么区别:

1. 游戏开发不需要布局文件,需要图层和画布、场景都是用画出来的。

2. 游戏里面的图片都是放在assets文件夹下,通过特定方法绘制到图层上。

OK,下面我们就边说边看:

1.新建个工程,我这里就叫做Cocos2dDemo。直接删除布局文件。

2.导入cocos2d包,文章最后会有下载链接,也可以自己去github.com上下载。我这里就不给链接了。

3.做一些初始化的操作。看代码:

	CCGLSurfaceView  ccglSurfaceView=new CCGLSurfaceView(this);// 参数里面的上下文只能传递Activity 不能传递其它的上下文  因为底层强转成了activity
		setContentView(ccglSurfaceView);
		director = CCDirector.sharedDirector();
		
		// 开启线程 
		director.attachInView(ccglSurfaceView);
		director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);// 设置游戏的方向
		director.setScreenSize(480, 320);  // 设置屏幕的分辨率    可以自动适配
		director.setDisplayFPS(true);// 显示当前游戏的帧率    30
		//  运行场景 
		CCScene ccScene=CCScene.node();
		ccScene.addChild(new GameLay());// 场景添加图层 
		director.runWithScene(ccScene);
代码说明:CCGLSurFaceView这个类是cocos2D封装好的里,我们这里可以直接使用。场景类!CCDirector是导演类,可以执行导演的功能,比如如何演好这场电影,一步一步如何进行下去。

4.看精灵的产生类。

player = CCSprite.sprite("search_ioc.png");
		player.setPosition(100, 100);
		this.addChild(player);
		CGPoint pos = new CGPoint();
		pos.set(700, 100);
		CCJumpTo to = CCJumpTo.action(3, pos, 400, 7);
		player.runAction(to);
代码说明:CCSprite是精灵类,精灵是游戏中一切会动的东西。OK到这里一个简单的游戏就完成。实现的是让这个精灵在画布上跳7次。


下面是我总结的一些方面:

CCSprite
ccSprite.setAnchorPoint(0, 0);// 默认是0.5 0.5 图片钉子的位置
ccSprite.setPosition(x, y);// 设置坐标点 订到墙的哪个位置
ccSprite.setFlipX(true); 水平翻转
ccSprite.setFlipY(true);// 垂直翻转
ccSprite.setScale(2);// 设置缩放比例 参数2 代表 宽度和高度都是原来的两倍
ccSprite.setOpacity(100);// 设置不透明度 值越大 越不透明 0-255
ccSprite.setVisible(false);// 让精灵不可见
ccSprite.removeSelf();// 把自己回收 ,被回收了
CCDirector
director.attachInView(ccglSurfaceView) 开启线程
director.runWithScene(ccScene); 运行场景
导演的生命周期要和activity的生命周期绑定在一起
director.setScreenSize(480, 320); // 设置屏幕的分辨率 可以自动适配
director.setDisplayFPS(true);// 显示当前游戏的帧率 30
CCScene
目前该类没有什么具体的功能,它只是作为一个项目中需要展示内容的根节点存在。
CCLayer
this.addChild(ccSprite); // 图层添加精灵
2 
// 按下 public boolean ccTouchesBegan(MotionEvent event);
// 移动
public boolean ccTouchesMoved(MotionEvent event);

// 抬起
public boolean ccTouchesEnded(MotionEvent event);

//取消
public boolean ccTouchesCancelled(MotionEvent event);
3 setIsTouchEnabled(true);// 打开了触摸事件
CGPoint cgpoint = this.convertTouchToNodeSpace(event); 坐标系点的转换
CCNode
CCNode 是精灵场景图层的父类, 具备了 精灵 场景 图层大部分的方法
CCAction
动作
CCFiniteTimeAction 和时间相关动作

CCInstantAction 瞬时动作 闪现

CCIntervalAction 延迟动作 疾跑

CCFollow 跟随动作

CCRepeatForever 永不停止的动作
CCSpeed 和速度相关的动作
CCMoveTo
移动
没有相反动作
CCMoveBy
reverse 取相反动作
有相反动作的
跳跃
private void jumpBy() {
    // 1需要创建动作  跳跃
    //  参数1 时间 单位秒
    // 参数2  跳跃的坐标的变化

    // 参数4 跳跃的次数 
    CCJumpBy ccJumpBy=CCJumpBy.action(2, ccp(200, 200),100, 2);
    CCJumpBy reverse = ccJumpBy.reverse();
    // 串行动作
    CCSequence sequence=CCSequence.actions(ccJumpBy, reverse);
    CCRepeatForever forever=CCRepeatForever.action(sequence);// 把一个串行动作做了一层包装 包装的结果该动作可以永不停止的循环
    // 2 获取一个精灵
    CCSprite ccSprite=getSprite();
    //3 精灵运行动作
    ccSprite.runAction(forever);
}
缩放
        private void scale() {
    // 参数1 缩放时间
    // 参数2 缩放后的大小
    CCScaleBy ccScaleBy=CCScaleBy.action(1, 2);
    CCScaleBy reverse = ccScaleBy.reverse();
    CCSequence ccSequence=CCSequence.actions(ccScaleBy, reverse);
    CCRepeatForever forever=CCRepeatForever.action(ccSequence);
    CCSprite heart = getHeart();
    heart.setPosition(100, 100);
    heart.runAction(forever);
}
旋转
private void rotateBy() {
    CCRotateBy ccRotateBy=CCRotateBy.action(5, 270);
    CCSprite heart = getHeart();
    heart.setPosition(200, 100);
    heart.setAnchorPoint(ccp(0.5f, 0.5f));
    heart.runAction(ccRotateBy);
}

private void rotateTo() {  // 偷懒
    //参数1 时间
    // 参数2 旋转角度
    CCRotateTo ccRotateTo=CCRotateTo.action(5, 270);  // 旋转基于 锚点进行旋转
    CCSprite heart = getHeart();
    heart.setPosition(100, 100);
    heart.setAnchorPoint(ccp(0.5f, 0.5f));

    heart.runAction(ccRotateTo);

}
颜色渐变
    private void tint() {
    // 创建动作 
    // 参数1 变化的时间  
    //参数2  变化的颜色改变
    CCTintBy ccTintBy=CCTintBy.action(1, ccc3(100, 50, -100));  //  0-255 
    // 特殊的精灵 专门用来显示文字
    // 参数1 要显示的文字 
    // 参数2   显示什么字体
    //  参数3 字体的大小
    CCLabel  ccLabel =CCLabel.labelWithString("那些年我们在传智的日子", "hkbd.ttf", 20);
    ccLabel.setColor(ccc3(0, 50, 200));
    this.addChild(ccLabel); //如果不添加到图层上 是没法显示的
    CCTintBy reverse = ccTintBy.reverse();
    CCSequence actions = CCSequence.actions(ccTintBy, reverse);
    CCRepeatForever action = CCRepeatForever.action(actions);
    // 如何获取到屏幕中间的位置 
    CCDirector ccDirector=CCDirector.sharedDirector();
    CGSize winSize = ccDirector.getWinSize();// 获取到了游戏屏幕的尺寸
    ccLabel.setPosition(winSize.width/2, winSize.height/2);
    ccLabel.runAction(action);

}
闪烁
    private void blink() {
    // 参数1  闪烁的时间 
    // 参数2 闪烁的次数
    CCBlink blink=CCBlink.action(2, 3);

    getSprite().runAction(blink);
}
淡入淡出
private void fade() {
//  CCFadeIn ccFadeIn=CCFadeIn.action(3);
    //getSprite().runAction(ccFadeIn);
    //CCFadeOut ccFadeOut=CCFadeOut.action(3);
    //getSprite().runAction(ccFadeOut);

    CCFadeIn ccFadeIn=CCFadeIn.action(3);
    ccFadeIn.reverse()
}
下载链接: cocos2D.jar



相关推荐
《精通Cocos2d-x游戏开发》分为《基础卷》和《进阶卷》两册。这两册都有明确的写作目的。《基础卷》专注于Cocos2d-x引擎基础,致力于让Cocos2d-x初学者成为一个基础扎实、靠谱的程序员。《进阶卷》专注于各种实用技术,是作者多年开发经验的结晶,书中的技术点大多是从实际工作中碰到的问题提炼而来的,从问题的本质出发到解决问题的思路,提供了多种解决方案,并对比各方案的优缺点,启发读者思考。 本书为《精通Cocos2d-x游戏开发》的《进阶卷》,共36章,分为4篇。第1篇为“实用技术篇”,主要内容有加密解密、增量更新、分辨率适配、调试技巧、Shader特效、裁剪遮罩、物理引擎、骨骼动画、CocoStudio最佳实践等实用技术。第2篇为“Lua篇”,主要内容有Lua的基础知识、Lua的table与面向对象、C/C++与Lua的通信、Cocos2d-x原生Lua框架与Quick-Cocos2d-xLua框架等。第3篇为“网络篇”,主要内容有网络基础、selectIO复用、Socket和Libcurl等基础知识,以及弱联网、强联网、局域网等网络游戏的客户端和服务端开发。第4篇为“跨平台篇”,主要内容有Android和iOS平台的开发和打包知识,以及如何使用AnySDK快速接入第三方SDK。 本书适合使用Cocos2d-x进行游戏开发的中高级读者阅读,尤其适合在使用Cocos2d-x开发过程中碰到问题的程序员,以及希望学习一些实用技术,从而丰富自身经验的程序员。对于大中专院校的学生和社会培训班的学员,本书也是一本不可多得的学习教程。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页