使用Quick-Cocos2d-x搭建一个横版过关游戏(四)拷来个进度条类,

但是由于那个类有个bug,在setProgress里面self.fill是找不到的,所以我改进了一下,代码如下:

  1. local Progress = class("Progress", function()
  2. -- body
  3. return display.newNode()
  4. end)
  5.  
  6. function Progress:ctor(background, fill)
  7. local progress = display.newSprite(background)
  8. local fill = display.newProgressTimer(fill, display.PROGRESS_TIMER_BAR)
  9. fill:setMidpoint(CCPoint(,0.5))
  10. fill:setBarChangeRate(CCPoint(1.0,))
  11. fill:setPosition(progress:getContentSize().width*0.5, progress:getContentSize().height*0.5)
  12. progress:addChild(fill)
  13. progress:scale(0.5)
  14. fill:setPercentage()
  15. self.fill = fill
  16. self:addChild(progress)
  17. end
  18.  
  19. function Progress:setProgress(progress)
  20. -- body
  21. self.fill:setPercentage(progress)
  22. end
  23.  
  24. return Progress

PS:其实还有一种解决办法,如下:

  1. local Progress = class("Progress", function( background, fill )
  2. -- body
  3. local progress = display.newSprite(background)
  4. local fill = display.newProgressTimer(fill, display.PROGRESS_TIMER_BAR)
  5. fill:setMidpoint(CCPoint(,0.5))
  6. fill:setBarChangeRate(CCPoint(1.0,))
  7. fill:setPosition(progress:getContentSize().width*0.5, progress:getContentSize().height*0.5)
  8. progress:addChild(fill)
  9. progress:scale(0.5)
  10. fill:setPercentage()
  11. progress.fill = fill
  12. return progress
  13. end)

然后就是新增了一个角色的场景显示类GameUnit,暂时只用作角色显示,后续有功能再加,代码如下:

  1. local GameUnit = class("GameUnit", function()
  2. -- body
  3. return display.newNode()
  4. end)
  5.  
  6. local Progress = import("app.views.Progress")
  7.  
  8. function GameUnit:ctor(hero)
  9. -- body
  10. local clas = hero.class
  11. cc.EventProxy.new(hero, self)
  12. :addEventListener(clas.CHANGE_STATE_EVENT, handler(self, self.onStateChange))
  13. :addEventListener(clas.KILL_EVENT, handler(self, self.onKilled))
  14. :addEventListener(clas.HP_CHANGED_EVENT, handler(self, self.onHpChanged))
  15. :addEventListener(clas.EXP_CHANGED_EVENT, handler(self, self.onExpChanged))
  16.  
  17. self.player = hero
  18. self:initDisplay()
  19. end
  20.  
  21. function GameUnit:onStateChange( event )
  22. -- body
  23. end
  24.  
  25. function GameUnit:onKilled( event)
  26. -- body
  27. end
  28.  
  29. function GameUnit:onHpChanged( event )
  30. -- body
  31. end
  32.  
  33. function GameUnit:onExpChanged( event )
  34. -- body
  35. end
  36.  
  37. --初始化显示
  38. function GameUnit:initDisplay()
  39. -- 角色外观
  40. local shape
  41. if self.player ~= nil then
  42. --todo
  43. shape = CCArmature:create(self.player:getRes())
  44. local animation = shape:getAnimation()
  45. animation:setSpeedScale(0.4)
  46. animation:play("anim_idle")
  47. self:setPosition(self.player:getX(), self.player:getY())
  48. self:setScaleX(self.player:getDirection())
  49. else
  50. shape = display.newSprite("defaultimage.png")
  51. end
  52. self:addChild(shape)
  53. self.shape = shape
  54.  
  55. --角色血条
  56. self.hpbar = Progress.new("progres_bg.png","progress.png")
  57. self:addChild(self.hpbar)
  58. self.hpbar:setProgress()
  59. end
  60. --传入|更新数据
  61. function GameUnit:setData()
  62. -- body
  63. end
  64. --取得数据
  65. function GameUnit:getData()
  66. return self.hero
  67. end
  68. --添加事件:重复利用这个对象的时候会用到
  69. function GameUnit:addEvents()
  70. -- body
  71. end
  72. --移除事件:重复利用这个对象的时候会用到
  73. function GameUnit:removeEvents()
  74. -- body
  75. end
  76.  
  77. return GameUnit

GameUnit里面包含了一个显示游戏角色形象的Sprite和一个显示血条的Progress,我们可以根据情况选择是否对外公开更新显示的接口。

现在,我们游戏角色的状态变更相关逻辑都在这里处理就行了。

所以,我们可以这样子初始化角色显示对象:

  1. local attacker = app:getObject("me")
  2. local attackerSp = GameUnit.new(attacker)
  3. self.layer:addChild(attackerSp)
  4.  
  5. local enemy = app:getObject("enemy")
  6. local attackerSp1 = GameUnit.new(enemy)
  7. self.layer:addChild(attackerSp1)

以下是现在的效果图:

下一步需要完善的是游戏角色类根据起对应的行为改变更新显示。

Quick Cocos2dx 场景对象基类实现的更多相关文章

  1. winform中利用反射实现泛型数据访问对象基类(1)

    考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...

  2. ios中解析json对象基类

    这个是对上面一篇写的一个解析json对象的基类 @interface BaseObjectFromJson : NSObject + (id) objectWithDict:(NSDictionary ...

  3. winform中利用反射实现泛型数据访问对象基类(3)

    继续完善了几点代码 满足没有主键的情况下使用 并且完善实体字段反射设置value时的类型转换 /// <summary> /// DAO基类 实体名必须要与数据表字段名一致 /// < ...

  4. winform中利用反射实现泛型数据访问对象基类(2)

    在1的基础上做了一点改进 参数化处理 看上去更简洁 无主键情况下 update 方法需要改进 insert delete没有问题  /// <summary>     /// DAO基类 ...

  5. Quick Cocos2dx 场景转换问题

    项目结构是这样子的: 主场景代码是这样子的: local MainScene = class("MainScene", function() return display.newS ...

  6. cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析

    c++ 头文件包含 原因的分析:   c++  头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifn ...

  7. iOS控制器之基类设计

    题记 在进入新公司后.经过这一个月的重构项目,终于把项目做到了个人相对满意的程度(还有一种不满意的叫老板的需求,提过多次意见也没用= =!).在这次重构中按照以前的思路设计出了个人觉得比较适用的一个基 ...

  8. C++基类和派生类之间的转换

    本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...

  9. cocos2d-x 的两大基类

    cocos2d-x 有两个重要的基类,一个管理引用计数的 Ref,别一个则定义许多基本属性的 Node. 在 cocos2d-x 中的基本概念 说到 create 函数的时候提到 cocos2d-x ...

随机推荐

  1. tomcat连接数设置

    如何加大tomcat连接数 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:minProcessors:最小空闲连接线程数,用 ...

  2. 【C#】HTTP请求GET,POST(远程证书失效)

    HTTP定义了与服务器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删.一般情况下我们只用到GET和POST,其他两种都也可以用GET和POST来实现,很多浏览 ...

  3. JavaBean技术的一些讲解

    JavaBean: 由于原先的jsp的html代码和css代码以及java代码都是写在一起的,所以看起来就比较冗余,同时 也体现不了javaBean中面向对象的思想的{当然可以同过jstl标签库以及m ...

  4. 2.1 工具使用:xmind

    概念 心智图,又称脑图.思维导图.灵感触发图.概念地图或思维地图,是一种图像式思维的工具与及一种利用图像式思考辅助工具来表达思维的工具. 详细的可以查看这里(维基百科)还有这里(百度百科) 用了思维导 ...

  5. jquery 限制字数 显示输入字数 插件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. PAT (Advanced Level) 1105. Spiral Matrix (25)

    简单模拟. #include<cstdio> #include<cstring> #include<cmath> #include<map> #incl ...

  7. 使用for循环还是foreach循环?

    很多时候我们很自然的认为,for循环的时候使用foreach和原来的for循环用下标的方式遍历是相同的. 而且因为foreach循环写法简单,很容易理解,而且少去了很多麻烦的变量,所以估计在学会使用f ...

  8. PAT1008

    1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B The highest building in our city has on ...

  9. cordova 启动界面config.xml配置

    <preference name="SplashScreen" value="screen"/> <preference name=" ...

  10. android从asset文件夹读取文件

    1)将一个txt文本(msg.txt)复制到开发目录的asset文件夹下. 2)用getAssets().open()可以得到一个输入流.注意getAssets方法必须用在Activity下边.如果不 ...