当前位置: 首页 > 编程日记 > 正文

Quick Cocos2dx 初步战斗

呵呵,图片先来一发:

最近懒,很懒,连我自己都觉得有点可耻了。

但是实在没有什么东西啊,温水煮青蛙的什么的。

吐槽完成,以上。

目前完成了简单的战斗部分,AI还需要抽出来。

然后突然之间想到手游的帧频是60fps/s,然后就放弃了之前比较平滑的CCMoveTo,换成了每帧去计算坐标。

还增加了掉血计算与表现,与死亡逻辑处理。

虽然处理得不是很干净,但是这个是后续需要优化的部分。

本次的主要用到的知识点:

framework.scheduler

framework.transition

写这篇blog的目的是在于给自己一点动力,能够一步一个脚印去记录自己。

主要更新的代码部分:

GameUnit.lua:增加了死亡逻辑处理

GameUnit.lua
  1 local GameUnit = class("GameUnit", function()
  2     return display.newNode()
  3 end)
  4 local scheduler = import("framework.scheduler")
  5 local Progress = import("app.views.Progress")
  6 
  7 function GameUnit:ctor(hero)
  8     -- body
  9     local clas = hero.class
 10     cc.EventProxy.new(hero, self)
 11         :addEventListener(clas.CHANGE_STATE_EVENT, handler(self, self.onStateChange))
 12         :addEventListener(clas.KILL_EVENT, handler(self, self.onKilled))
 13         :addEventListener(clas.HP_CHANGED_EVENT, handler(self, self.onHpChanged))
 14         :addEventListener(clas.EXP_CHANGED_EVENT, handler(self, self.onExpChanged))
 15 
 16     self.player = hero
 17     self:initDisplay()
 18 end
 19 
 20 function GameUnit:onStateChange( event )
 21     self:updateShapeDisplay(self.player:getState())
 22 end
 23 
 24 --更新角色显示{"anim_walk","anim_eat","anim_placeladder","anim_idle","anim_ladderwalk","anim_laddereat","anim_death"}
 25 function GameUnit:updateShapeDisplay(state)
 26     local animname = "anim_idle"
 27     if state == "walking" then
 28         animname = "anim_walk"
 29     elseif state == "firing" then
 30         animname = "anim_eat"
 31     elseif state == "dead" then
 32         animname = "anim_death"
 33     end
 34     printInfo("GameUnit state changed to %s playing : %s", state, animname)
 35     if self.shape ~= nil then
 36         local animation = self.shape:getAnimation()
 37         animation:setSpeedScale(0.6)
 38         animation:play(animname)
 39         self:setPosition(self.player:getX(), self.player:getY())
 40         self:setScaleX(self.player:getDirection())
 41         
 42     end
 43 
 44     if self.player:isDead() then
 45         scheduler.performWithDelayGlobal(handler(self, self.autoRemove), 1.5)
 46     end
 47 end
 48 
 49 function GameUnit:onKilled( event)
 50     -- body
 51 end
 52 
 53 function GameUnit:onHpChanged( event )
 54     self.hpbar:setProgress(self.player:getHp()/self.player:getMaxHp() * 100)
 55     
 56 end
 57 
 58 function GameUnit:autoRemove()
 59     local action = CCFadeTo:create(1.0, 0.0)
 60     transition.execute(self.shape, action, {
 61         onComplete = function( )
 62             self:removeSelf()
 63         end
 64         })
 65 end
 66 
 67 function GameUnit:onExpChanged( event )
 68     -- body
 69 end
 70 
 71 --初始化显示
 72 function GameUnit:initDisplay()
 73     -- 角色外观
 74     local shape = CCArmature:create(self.player:getRes())
 75     self.shape = shape
 76        self:updateShapeDisplay(self.player:getState())
 77        shape:setAnchorPoint(CCPoint(0.5,0))
 78        self:addChild(shape)
 79 
 80     --角色血条
 81     self.hpbar = Progress.new("progres_bg.png","progress.png")
 82     self.hpbar:pos(0.5, shape:getContentSize().height)
 83     self:addChild(self.hpbar)
 84 end
 85 --传入|更新数据
 86 function GameUnit:setData()
 87     -- body
 88 end
 89 --取得数据
 90 function GameUnit:getData()
 91     return self.hero
 92 end
 93 --添加事件:重复利用这个对象的时候会用到
 94 function GameUnit:addEvents()
 95     -- body
 96 end
 97 --移除事件:重复利用这个对象的时候会用到
 98 function GameUnit:removeEvents()
 99     -- body
100 end
101 
102 return GameUnit

PlayerController.lua:增加了伤害跳字,优化了角色移动的计算方式

  1 local PlayerController = class("PlayerController")
  2 
  3 function PlayerController:ctor()
  4 end
  5 
  6 function PlayerController:initEventListener(hero)
  7 end
  8 
  9 function PlayerController:tick(spMaps)
 10     ---更新数据
 11     --[[
 12     for name,sp in ipairs(spMaps) do
 13         if sp:getAI() == nil then
 14             sp:setAI(ai)
 15         end
 16     end]]
 17     local  enemy
 18     local me = app:getObject("me")    
 19     local mytarget = me:getTarget()
 20     if mytarget == nil then
 21         me:searchTarget()
 22     end
 23 
 24     mytarget = me:getTarget()
 25     if mytarget == nil then
 26         printLog(10, "Win==============")
 27     else
 28         enemy = app:getObject(mytarget)
 29         if enemy:isDead() then
 30             printLog(10, "Win==============")
 31             return
 32         end
 33         local myShape
 34         local distance = self:dist(enemy:getX(),enemy:getY(), me:getX(), me:getY())
 35         if distance < me:getRadius() then
 36             if me:getState() == "walking" then--走动状态中的话进行待命
 37                 myShape = spMaps[me:getId()]
 38                 myShape:stopActionByTag(100)
 39                 me:standby()
 40             elseif me:getState() == "idle" then--待命状态的话根据冷却时间判断是否攻击
 41                 if me:canFire() then
 42                     me:fire(enemy)
 43                     local percent = math.random(0,10)
 44                     local stat_sp
 45                     if percent >= 6 then
 46                         stat_sp = self:getHarmSp(10,enemy:getX(),enemy:getY()+50)
 47                         enemy:decreaseHp(10)
 48                     else
 49                         stat_sp = self:getHarmSp(0,enemy:getX(),enemy:getY()+50)
 50                     end
 51 
 52                     local parent = display.getRunningScene()
 53                     assert(parent ~= nil, "parent is nil") 
 54                     assert(stat_sp ~= nil, "stat_sp is nil")
 55                     if stat_sp ~= nil and parent ~= nil then
 56                         parent:addChild(stat_sp)
 57                         transition.execute(stat_sp, CCMoveTo:create(1.0, CCPoint(enemy:getX()-50, enemy:getY()+150)), {
 58                             onComplete = function()
 59                                 stat_sp:removeSelf()
 60                             end
 61                             })
 62                     end
 63                 else
 64                     print("Cooling down....")
 65                 end
 66             end
 67         else
 68             if me:getState() ~= "walking" then
 69                 me:walk()
 70                 myShape = spMaps[me:getId()]
 71                 --[[local duration = distance/me:getSpeed()
 72                 local action = CCMoveTo:create(duration,CCPoint(enemy:getX(),enemy:getY()))
 73                 action:setTag(100)
 74                 myShape:runAction(action)]]
 75             else
 76                 me:updatePos()
 77             end
 78         end
 79     end
 80     --更新显示:用显示去更新数据,这个是不对的
 81     for key,sp in pairs(spMaps) do
 82         local data = app:getObject(key)
 83         if data ~= nil then
 84             sp:setPosition(data:getX(), data:getY())
 85             --[[data:setX(sp:getPositionX())
 86             data:setY(sp:getPositionY())]]
 87         end
 88     end
 89 end
 90 
 91 function PlayerController:getHarmSp( harm, posx, posy )
 92     local  sp 
 93     local harmstr = string.format("%d", harm)
 94     if harm > 0 then
 95         sp = CCNode:create()
 96         sp:pos(posx, posy)
 97         for i=1,#harmstr do
 98             local tempsp = display.newSprite("fight/"..string.sub(harmstr, i,i)..".png",(i-1)*30,0)
 99             local size = tempsp:getContentSize()
100             printLog(1, "tempsp size w:%f h:%f", size.width, size.height)
101             if tempsp ~= nil then
102                 sp:addChild(tempsp)
103             end
104         end
105     else
106         sp = display.newSprite("shanbix_wenzi.png", posx, posy)
107     end
108     return sp
109 end
110 
111 function PlayerController:dist( ax,ay,bx,by )
112     local dx,dy = ax - bx, ay - by
113     return math.sqrt(dx*dx + dy*dy)
114 end
115 
116 function PlayerController:useSkill(skill)
117     self.view:useSkill(skill)
118 end
119 
120 function PlayerController:control( view )
121     -- body
122     self.view = view
123 end
124 
125 return PlayerController
PlayerController

转载于:https://www.cnblogs.com/adoontheway/p/3978854.html

相关文章:

C#简介- 类和对象

类&#xff08;class&#xff09;是C#类型中最基础的类型。类是一个数据结构&#xff0c;将状态&#xff08;字段&#xff09;和行为&#xff08;方法和其他函数成员&#xff09;组合在一个单元中。类提供了用于动态创建类实例的定义&#xff0c;也就是对象&#xff08;object&…

普诺飞思获创新工场新一轮投资,加速神经拟态视觉传感技术商业化

2021年7月6日&#xff0c;中国上海——世界领先的神经拟态视觉解决方案企业普诺飞思&#xff08;Prophesee&#xff09;今日宣布 C轮融资&#xff0c;由创新工场领投、小米及上海韦豪创芯跟投&#xff0c;数家老股东加码。其中&#xff0c;小米是全球三大移动设备供应商之一&am…

YYHS-魏传之长坂逆袭(梦回三国系列T1)

题目描述 众所周知&#xff0c;刘备在长坂坡上与他的一众将领各种开挂&#xff0c;硬生生从曹操手中逃了出去&#xff0c;随后与孙权一起火烧赤壁、占有荆益、成就霸业。而曹操则在赤壁一败后再起不能&#xff0c;终生无力南下。建安二十五年(220年)&#xff0c;曹操已到风烛残…

Linux中/proc目录下文件详解

Linux中/proc目录下文件详解&#xff08;一&#xff09;声明&#xff1a;可以自由转载本文&#xff0c;但请务必保留本文的完整性。作者&#xff1a;张子坚email:zhangzijian163.com说明&#xff1a;本文所涉及示例均在fedora core3下得到。 ---------------------------------…

Swift常量和变量

常量和变量由一个特定名称来表示&#xff0c;如maxNumber 或者 message。常量所指向的是一个特定类型的值&#xff0c; 如数字10或者字符”hello”。变量的值可以根据需要不断修改&#xff0c;而常量的值是不能够被二次修改的。 常量和变量的声明 常量和变量在使用前都需要声明…

Openpose+Tensorflow 这样实现人体姿态估计 | 代码干货

作者 | 李秋键出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;人体姿态估计指从单个 RGB 图像中精确地估计出人体的位置以及检测骨骼关键点的位置。人体姿态估计是计算机视觉领域的研究热点&#xff0c;是诸多计算机视觉任务的基础&#xff0c;如动作分类、异常行为检…

主动防病毒内容篇

为何需要主动防病毒 近年来&#xff0c;对于防病毒软件效用的争论有愈演愈烈之势。我们知道&#xff0c;目前几乎所有的主流防病毒产品都是以分析病毒特征码为基础&#xff0c;通过升级安装在用户端的病毒特征码数据库实现对病毒的辨识。只有发现和确认了病毒之后&#xff0c;才…

icinga服务器系统监控软件的安装

系统环境rhel和Centos都可以安装这里我们所使用的安装包为中文版的icinga-cn-1.9.3.tar.bz2&#xff08;1&#xff09;安装icinga软件所支持的组件包&#xff08;我们这里采用yum源的方式&#xff09;组件&#xff1a;libdbi-dbd-mysql-0.8.3-5.1.el6.x86_64.rpmgd-devel-2.0.3…

size_t与ssize_t

size_t与ssize_t 为了增强程序的可移植性&#xff0c;便有了size_t&#xff0c;它是为了方便系统之间的移植而定义的&#xff0c;不同的系统上&#xff0c;定义size_t可能不一样。 l 在32位系统上定义为unsigned int &#xff0c;也就是说在32位系统上是32位无符号整形…

自动驾驶中实时车道检测和警报

作者 | 小白 来源 | 小白学视觉未来十年&#xff0c;自动驾驶将彻底改变人们的出行方式。目前&#xff0c;自动驾驶应用程序目前正在测试各种案例&#xff0c;包括客车、机器人出租车自、动商业运输卡车、智能叉车以及用于农业的自动拖拉机。自动驾驶需要计算机视觉感知模块来…

OSS.Core基于Dapper封装(表达式解析+Emit)仓储层的构思及实现

最近趁着不忙&#xff0c;在构思一个搭建一个开源的完整项目&#xff0c;至于原因以及整个项目框架后边文章我再说明。既然要起一个完整的项目&#xff0c;那么数据仓储访问就必不可少&#xff0c;这篇文章我主要介绍这个新项目&#xff08;OSS.Core&#xff09;中我对仓储层的…

GNU Make chapter 2 —— Makefile 介绍

Makefile是由一系列的rule规则组成&#xff0c;这些rule都遵循以下形式: target ... : prerequisites ...command...... target&#xff08;目标&#xff09; 一般来说是需要生成的程序&#xff08;模块&#xff09;的名字&#xff0c;也可以是要执行的动作的名字&#xff0c;这…

C#编写的生成缩略图程序

if(fileupload.PostedFile!null) { //addto为要添加的属性&#xff0c;aboutfile为文件说明 string nam fileupload.PostedFile.FileName ; //取得文件名(抱括路径)里最后一个"."的索引 int i nam.LastIndexOf("."); /…

深度盘点Python11个主流框架:Pandas、Django、Matplotlib、Numpy、PyTorch......

六月份TIOBE编程语言排行榜&#xff0c;位居第二名的Python与第一名C语言之间的差距正在逐渐缩小。Python如此受欢迎一方面得益于它崇尚简洁的编程哲学&#xff0c;另一方面是因为强大的第三方库生态。要说杀手级的库&#xff0c;很难排出个先后顺序&#xff0c;因为python的明…

多表查询 外连接

关于外连接查询&#xff1a;链接查询的时候经常直接使用连接语句&#xff0c;可是如果只有主键没有写其他属性的时候&#xff0c;直接用连接查询得到的记录数是不完整的。 所以应该使用外连接查询&#xff1a;left join on 或者right join on. 例如在工单管理部分绑定到gridvie…

C#生成Excel文件的方法

一个示例&#xff1a; class AppTest { private Excel.ApplicationClass _x; public static void Main0() { AppTest a new AppTest(); a._x new Excel.ApplicationClass(); a._x.UserControl false; for (int i 0 ;i < 4; i) { a.SaveToXls("D://test//" i…

太酷了,Python 制作足球可视化图表 | 代码干货

作者 | 小F来源 | 法纳斯特大家好&#xff0c;我是小F。最近不少小伙伴都会熬夜看欧洲杯。今年的欧洲杯相比起往年的欧洲杯来说&#xff0c;可谓是冷门频出&#xff0c;出乎意料。真的不知道&#xff0c;第一会花落谁家&#xff5e;本期小F就和大家分享一下&#xff0c;用Pytho…

便捷,轻巧的Groovy数据库操作

本文主要介绍Groovy对数据的CRUD操作&#xff0c;熟悉groovy.sql包&#xff0c;测试使用的数据库是H2。1.数据库连接配置//数据库连接配置 def db [url:jdbc:h2:mem:groovy,user:root,password:root,driver:org.h2.Driver ];2.创建数据库连接&#xff0c;这里使用到Groovy的Sq…

Linux查看CPU和内存使用情况详解

在系统维护的过程中&#xff0c;随时可能有需要查看 CPU 使用率&#xff0c;并根据相应信息分析系统状况的需要。在 CentOS 中&#xff0c; 可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后&#xff0c;CPU 使用状态会以全屏的方式显示&#xff0c;并且会处在对话的 模…

Fatal Error: Out of memory php内存溢出处理三种方法

有时候我们在运行php程序的时候会发现 Fatal Error: Out of memory 这样的提示&#xff0c;这有可能是程序中用到了大量了变量和对象&#xff0c;导致分配的内存不够用。 修改php.ini文件里的memory_limit参数 方法一&#xff1a;修改php.ini文件里的memory_limit默认参数128M&…

腾讯联合国家天文台启动探星计划,优图AI可提升120倍数据处理效率

7月9日&#xff0c;2021世界人工智能大会腾讯论坛在上海举办&#xff0c;腾讯云副总裁、腾讯优图实验室总经理吴运声发表了“人工智能的可持续发展之道”主题演讲&#xff0c;宣布全新推出腾讯云TI ONE、TI Matrix、TI DataTruth三大AI底层平台&#xff0c;可以提供包括算法开发…

C++:STL标准入门汇总

学无止境&#xff01;&#xff01;&#xff01; 第一部分&#xff1a;&#xff08;参考百度百科&#xff09; 一、STL简介 STL&#xff08;Standard Template Library&#xff0c;标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R…

C#精髓【月儿原创】第三讲 C#泛型有什么好处

说明&#xff1a;准备出一个系列&#xff0c;所谓精髓讲C#语言要点。这个系列没有先后顺序&#xff0c;不过尽量做到精。可能会不断增删整理&#xff0c;本系列最原始出处是csdn博客,谢谢关注。 C#精髓 第三讲 C#泛型有什么好处 作者&#xff1a;清清月儿 主页&#xff1a…

腾讯汤道生:人工智能最大的价值是“服务于人”

7月9日&#xff0c;2021世界人工智能大会腾讯论坛在上海拉开帷幕&#xff0c;腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生开场致辞。汤道生表示&#xff0c;人工智能的最大价值是“服务于人”&#xff0c;让衣食住行实现“以消费者为中心”的智慧化供给&#xff0c;让生产…

[转]在Eclipse中使用JUnit4进行单元测试(中级篇)

我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclipse自动生成了一个测试框架&#xff0c;在这篇文章中&#xff0c;我们来仔细分析一下这个测试框架中的每一个细节&#xff0c;知其然更要知其所以然&#xff0c;才能更加熟练地应用JUnit4。 一、 包含必要地Package…

linux下磁盘镜像软件DRBD的使用

一、 什么是DRBD DRBD的全称为&#xff1a;Distributed Replicated Block Device (DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成&#xff0c;用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与…

ASP.NET2.0轻松搞定统计图表【月儿原创】

ASP.NET2.0轻松搞定统计图表 作者&#xff1a;清清月儿 主页&#xff1a;http://blog.csdn.net/21aspnet/ 时间&#xff1a;2007.3.27 本文讲述如何绘制条形图&#xff0c;折线图&#xff0c;柱形图&#xff0c;面积图等常见图形。 效果图&#xff1a; 手把手…

基于 Python 的 8 种常用抽样方法

抽样是统计学、机器学习中非常重要&#xff0c;也是经常用到的方法&#xff0c;因为大多时候使用全量数据是不现实的&#xff0c;或者根本无法取到。所以我们需要抽样&#xff0c;比如在推断性统计中&#xff0c;我们会经常通过采样的样本数据来推断估计总体的样本。上面所说的…

RegularExpressions(4) RegularExpressions 成员(一)

为什么80%的码农都做不了架构师&#xff1f;>>> 主要成员有: IRegex、ICapture、IMatch、IMatchCollection、IGroup、IGroupCollection 先看: ICapture; 常用的 IMatch、IGroup 都是从它继承而来; 作为一个底层接口一般不会被直接使用. 它为 IMatch、IGroup 提供了…

公有云环境下应用程序的自动化部署与水平扩展问题

先介绍了一下公有云计算环境下的一些特点&#xff0c;再根据这些特点探讨一下作为云计算用户而言&#xff0c;如何对应用程序做好自动化部署和水平扩展&#xff08;弹性计算&#xff09;的问题。阅读本文需要有一定的云计算知识、开发运维知识。 公有云环境的优势及其特点 公有…