笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)
在这之前,声明一下:
做不完我是小狗。
没办法,没毅力和恒心,之前的那个Quick Cocos2dx做的横版过关游戏的demo已经转成了3.3的版本了,其实也算是个半成品,战斗,UI啥的都有了,呵呵。
本次DEMO要达成的目的如下:
1 熟悉Cocos2dx 3.3 - lua
2 使用Joystick
3 完成简单的怪物AI
4 尝试扩展现有的api(可选)
嗯,差不多就以上了。
今天第一次笔记。
当前完成的任务有如下:
1 使用新的player新建项目
2 在场景中添加Sprite以及其帧动画
3 帧动画的播放与停止
完整代码如下:
local MainScene = class("MainScene", function()
return display.newScene("MainScene")
end)
function MainScene:ctor()
display.newSprite("bg.jpg")
:pos(display.cx, display.cy)
:addTo(self)
end
function MainScene:onEnter()
display.addSpriteFrames("hero/zhuge.plist","hero/zhuge.png")
self.player = display.newSprite()
self:addChild(self.player)
self.player:pos(display.cx, display.cy)
self.animAction = self:playAnimation(self.player, "standby", , , false)
self:setTouchEnabled(true)
self:addNodeEventListener(cc.NODE_TOUCH_EVENT, function( event )
self:onTouched(event)
end)
end
function MainScene:onTouched( event )
self.animAction = self:playAnimation(self.player, "attack", , , true)
end
function MainScene:playAnimation(player, framename, startindex, endindex, once)
local animationname = player:getName()..framename
local animation = display.getAnimationCache(animationname)
if animation == nil then
local frames = display.newFrames(framename.."%04d",startindex, endindex)
animation = display.newAnimation(frames,/)
display.setAnimationCache(animationname,animation)
end
if self.animAction ~= nil then
transition.removeAction(self.animAction)
self.animAction = nil
end
local function onPlayCompleted( )
self.animAction = self:playAnimation(self.player, "standby", , , false)
end
if once == true then
return player:playAnimationOnce(animation,false,onPlayCompleted,)
else
return player:playAnimationForever(animation,)
end
end
function MainScene:onExit()
end
return MainScene
MainScene
学习点:
1 使用Flash CS6制作资源:
在网站上找到了一些gif动画资源,直接通过Flash CS6导入到库之后会自动生成一个影片剪辑,所有的动作可以全部导入到同一个库中:

然后需要进入到每个动作的影片剪辑,调整其注册点,我的注册点的对齐方式为,x 对齐肚子裤腰带的中间点,y直接就是负的高度了,这样的话每个动作的过度应该不会太突然:

每个动作都调整好了之后,按下ctr,然后连选需要导出素材的动作剪辑,然后右键->生成SpriteSheet表...:

仔细检查提示框一下选项:

特别要注意的是堆栈帧这个选项,可以去掉重复的图片。
然后点击导出,就可以直接在项目里头使用了。
2 帧动画在cocos2dx lua v3.3中的使用:
本次最主要的一段代码:
function MainScene:playAnimation(player, framename, startindex, endindex, once)
local animationname = player:getName()..framename
local animation = display.getAnimationCache(animationname)
if animation == nil then
local frames = display.newFrames(framename.."%04d",startindex, endindex)
animation = display.newAnimation(frames,/)
display.setAnimationCache(animationname,animation)
end
if self.animAction ~= nil then
transition.removeAction(self.animAction)
self.animAction = nil
end
local function onPlayCompleted( )
self.animAction = self:playAnimation(self.player, "standby", , , false)
end
if once == true then
return player:playAnimationOnce(animation,false,onPlayCompleted,)
else
return player:playAnimationForever(animation,)
end
end
这个方法主要是通过display.setAnimationCache和display.getAnimationCache来缓存和读取帧动画。
然后本方法返回的是一个Action,此Action对应本次播放的动画的Action,因为在SpriteEx.lua源码里面我们可以发现:
function Sprite:playAnimationOnce(animation, removeWhenFinished, onComplete, delay)
return transition.playAnimationOnce(self, animation, removeWhenFinished, onComplete, delay)
end function Sprite:playAnimationForever(animation, delay)
return transition.playAnimationForever(self, animation, delay)
end
帧动画的播放是交给transition实现的。
SpriteSheet能够在程序中使用,是因为在此之前我们已经在onEnter中写了:
display.addSpriteFrames("hero/zhuge.plist","hero/zhuge.png")
此节完。
2016-2-1:
汪~~~
笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)的更多相关文章
- cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详解献给刚開始学习的人们!
原代码来自于网络,因为cocos2d-x 3.0的资料,的确不多,与曾经版本号的接口非常难对上, 所以网上非常多样例都无法调试,对于新学习cocos2d-x 的同学,难度添加了,所以出一个超具体的样例 ...
- 如何做一个跨平台的游戏App?
如何做一个跨平台的游戏App? iOS和安卓系统上的应用程序,根据提供的内容不同,按照开发方式和用户体验不同,可区分为app和游戏: 首先从开发方式不同来说明,app开发一般是用操作系统官方提供的开发 ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单
系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面
游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》——概述
在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现
Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * ...
- (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能
利用JavaScript(JS)实现一个可输入分钟的倒计时钟功能本文章为 Tz张无忌 原创文章,转载请注明来源,谢谢合作! 网络各种利用JavaScript做倒计时的Demo对新手很不友好,这里我亲手 ...
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
//------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...
- 利用Django和装饰器做一个简单的修改密码页面
view视图代码: from django.shortcuts import render,redirect from django.http import HttpResponse from PIL ...
随机推荐
- NSNotificationCenter消息通信机制
作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息 [[NSNotificationCenter defaultCenter] ...
- 批量删除实现js+springmvc
前台的控件 <input type='checkbox' name='isSelect' value='"+data[i].id+"' ></input>& ...
- mongodb状态
基本信息 spock:PRIMARY>db.serverStatus() { "host" :"h6.corp.yongche.org", //主机名 & ...
- jarsigner
开发者应用认领说明 Flyme应用中心应用认领,采用Android的apk安装包签名机制来完成.如果你不清楚签名是什么,请联系开发人员协助您. 在Android平台发布应用程序之前,必须经过一个签名流 ...
- OC中的野指针,空指针,nil,Nil,NULL,NSNULL小结
周末与一个老朋友吃饭聊天,因为他正在培训班学习iOS开发,就随便聊了几句,发现自己OC基础上的欠缺和一些知识点的混淆.特此整理如下. 1.空指针 没有存储任何内存地址的指针就称为空指针(NULL指针) ...
- drupal7为admin/config页面添加自己开发的模块
1.实现显示模块 //admin/config配置页面添加journal块 $items['admin/config/journal'] = array(//注意格式为'admin/config/模块 ...
- opatch auto in windows db in 11.2.0.4
--prapare:copy 192.168.63.83 D:\oracle_patch\1612 to 192.168.2.169 D:\oracle_patch\1612cd D:\oracle_ ...
- POJ 1067 取石子游戏 威佐夫博弈
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 我们用(ak,bk)(ak ≤ bk ,k= ...
- Swift の 函数式编程
Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法糖和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. S ...
- c语言判断打开文件是否为空的方法
void writeReslut2(char* caseName,double averageTime,double max, double min,int loops,int size){ fpos ...