在这之前,声明一下:

做不完我是小狗。

没办法,没毅力和恒心,之前的那个Quick Cocos2dx做的横版过关游戏的demo已经转成了3.3的版本了,其实也算是个半成品,战斗,UI啥的都有了,呵呵。

本次DEMO要达成的目的如下:

1 熟悉Cocos2dx 3.3 - lua

2 使用Joystick

3 完成简单的怪物AI

4 尝试扩展现有的api(可选)

嗯,差不多就以上了。

今天第一次笔记。

当前完成的任务有如下:

1 使用新的player新建项目

2 在场景中添加Sprite以及其帧动画

3 帧动画的播放与停止

完整代码如下:

  1. local MainScene = class("MainScene", function()
  2. return display.newScene("MainScene")
  3. end)
  4.  
  5. function MainScene:ctor()
  6. display.newSprite("bg.jpg")
  7. :pos(display.cx, display.cy)
  8. :addTo(self)
  9. end
  10.  
  11. function MainScene:onEnter()
  12. display.addSpriteFrames("hero/zhuge.plist","hero/zhuge.png")
  13. self.player = display.newSprite()
  14. self:addChild(self.player)
  15. self.player:pos(display.cx, display.cy)
  16. self.animAction = self:playAnimation(self.player, "standby", , , false)
  17. self:setTouchEnabled(true)
  18. self:addNodeEventListener(cc.NODE_TOUCH_EVENT, function( event )
  19. self:onTouched(event)
  20. end)
  21. end
  22.  
  23. function MainScene:onTouched( event )
  24. self.animAction = self:playAnimation(self.player, "attack", , , true)
  25. end
  26.  
  27. function MainScene:playAnimation(player, framename, startindex, endindex, once)
  28. local animationname = player:getName()..framename
  29. local animation = display.getAnimationCache(animationname)
  30. if animation == nil then
  31. local frames = display.newFrames(framename.."%04d",startindex, endindex)
  32. animation = display.newAnimation(frames,/)
  33. display.setAnimationCache(animationname,animation)
  34. end
  35. if self.animAction ~= nil then
  36. transition.removeAction(self.animAction)
  37. self.animAction = nil
  38. end
  39. local function onPlayCompleted( )
  40. self.animAction = self:playAnimation(self.player, "standby", , , false)
  41. end
  42. if once == true then
  43. return player:playAnimationOnce(animation,false,onPlayCompleted,)
  44. else
  45. return player:playAnimationForever(animation,)
  46. end
  47. end
  48.  
  49. function MainScene:onExit()
  50. end
  51.  
  52. return MainScene

MainScene

学习点:

1 使用Flash CS6制作资源:

在网站上找到了一些gif动画资源,直接通过Flash CS6导入到库之后会自动生成一个影片剪辑,所有的动作可以全部导入到同一个库中:

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

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

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

特别要注意的是堆栈帧这个选项,可以去掉重复的图片。

然后点击导出,就可以直接在项目里头使用了。

2 帧动画在cocos2dx lua v3.3中的使用:

本次最主要的一段代码:

  1. function MainScene:playAnimation(player, framename, startindex, endindex, once)
  2. local animationname = player:getName()..framename
  3. local animation = display.getAnimationCache(animationname)
  4. if animation == nil then
  5. local frames = display.newFrames(framename.."%04d",startindex, endindex)
  6. animation = display.newAnimation(frames,/)
  7. display.setAnimationCache(animationname,animation)
  8. end
  9. if self.animAction ~= nil then
  10. transition.removeAction(self.animAction)
  11. self.animAction = nil
  12. end
  13. local function onPlayCompleted( )
  14. self.animAction = self:playAnimation(self.player, "standby", , , false)
  15. end
  16. if once == true then
  17. return player:playAnimationOnce(animation,false,onPlayCompleted,)
  18. else
  19. return player:playAnimationForever(animation,)
  20. end
  21. end

这个方法主要是通过display.setAnimationCache和display.getAnimationCache来缓存和读取帧动画。

然后本方法返回的是一个Action,此Action对应本次播放的动画的Action,因为在SpriteEx.lua源码里面我们可以发现:

  1. function Sprite:playAnimationOnce(animation, removeWhenFinished, onComplete, delay)
  2. return transition.playAnimationOnce(self, animation, removeWhenFinished, onComplete, delay)
  3. end
  4.  
  5. function Sprite:playAnimationForever(animation, delay)
  6. return transition.playAnimationForever(self, animation, delay)
  7. end

帧动画的播放是交给transition实现的。

SpriteSheet能够在程序中使用,是因为在此之前我们已经在onEnter中写了:

  1. display.addSpriteFrames("hero/zhuge.plist","hero/zhuge.png")

此节完。

2016-2-1:

汪~~~

笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)的更多相关文章

  1. cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详解献给刚開始学习的人们!

    原代码来自于网络,因为cocos2d-x 3.0的资料,的确不多,与曾经版本号的接口非常难对上, 所以网上非常多样例都无法调试,对于新学习cocos2d-x 的同学,难度添加了,所以出一个超具体的样例 ...

  2. 如何做一个跨平台的游戏App?

    如何做一个跨平台的游戏App? iOS和安卓系统上的应用程序,根据提供的内容不同,按照开发方式和用户体验不同,可区分为app和游戏: 首先从开发方式不同来说明,app开发一般是用操作系统官方提供的开发 ...

  3. 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

    系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...

  4. 用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面

    游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: ...

  5. 用cocos2d-html5做的消除类游戏《英雄爱消除》——概述

    在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...

  6. 用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现

    Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * ...

  7. (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能

    利用JavaScript(JS)实现一个可输入分钟的倒计时钟功能本文章为 Tz张无忌 原创文章,转载请注明来源,谢谢合作! 网络各种利用JavaScript做倒计时的Demo对新手很不友好,这里我亲手 ...

  8. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  9. 利用Django和装饰器做一个简单的修改密码页面

    view视图代码: from django.shortcuts import render,redirect from django.http import HttpResponse from PIL ...

随机推荐

  1. javascript克隆一个对象

    /* * 克隆一个对象 */ com.ty.repairtech.JsonOperation.clone = function(obj) { // Handle the 3 simple types, ...

  2. 使用PLSQL Developer连接Oracle Database 11g Express Edition

    要使用oracle数据库,需要准备三部分: 1.oracle服务端 2.oracle客户端 3.连接工具 你装的Oracle Database 11g Express Edition就是服务端,pls ...

  3. 详细,Qt Creator快捷键大全,附快捷键配置方法

    一.快捷键配置方法: 进入“工具->选项->环境->键盘”即可配置快捷键. 二.常用默认快捷键: 编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助(选中某一类或 ...

  4. windows指令

    &        无条件执行&符号后面的命令: &&      当&&前面的命令成功执行时,执行&&后面的命令,否则不执行: ||   ...

  5. Java 反射实例

    实体类:Userpackage com.reflect.model; public class User{ private User(int id, String username, String p ...

  6. mongodb备份

    一:数据导出,数据导入作为DBA(管理员),经常会碰到导入导出数据的需求,下面介绍实用工具(自带的):1:数据导入 mongoexport导出csv格式的文件./mongoexport -d Test ...

  7. .Net日期处理之格式化

    一.默认格式 2015/9/3 9:04:31 二.格式2 2015年9月3日 9:28:51 三.格式3 2015年9月3日 9:31 四.格式4 2015/9/3 9:39:01 五.格式5 20 ...

  8. white-space详解

    white-space共有5种属性normal,nowrap,pre,pre-wrap,pre-line 网上的解释多半过于详细冗长,先做个简化处理,以便查询 normal    忽略空白  过长换行 ...

  9. perfect-scrollbar示例

    <!DOCTYPE html> <html> <head> <title>perfect-scrollbar - www.97zzw.com -97站长 ...

  10. Exams

    Exams time limit per test 1 second memory limit per test 256 megabytes input standard input output s ...