Quick Cocos2dx controller的初步实现
很久没有记笔记了,今天记一下,最近都在瞎忙活,都不知道自己干了些啥。
我的Controller是在官方的mvc sample的里面的PlayerDualController上更改的,所以很多地方还没来得及清理掉。
源码如下:
local PlayerController = class("PlayerController") function PlayerController:ctor()
end function PlayerController:tick()
local enemy
local me = app:getObject("me")
local mytarget = me:getTarget()
if mytarget == nil then
print("I have no target...")
me:searchTarget()
else
printf("My target id : %s",me:getTarget())
end mytarget = me:getTarget()
if mytarget == nil then
print("Win...")
else
enemy = app:getObject(mytarget)
local distance = self:dist(enemy:getX(),enemy:getY(), me:getX(), me:getY())
if distance < then
me:fire(enemy)
print("Attack.....")
else
print("Keep moving....")
me:walk()
end
end
end function PlayerController:dist( ax,ay,bx,by )
local dx,dy = ax - bx, ay - by
return math.sqrt(dx*dx + dy*dy)
end return PlayerController
这个类暂时比较简单,只有两个方法。
PlayerController:tick 这个方法是每帧调用的,用来计算各种数据数据并保存到model,并且通知角色进行状态变更等事情,这个类后续会越来越复杂。
PlayerController:dist( ax,ay,bx,by )这个是计算两点之间的距离,可以用来判断角色是否进入战斗状态啦,子弹是否打中人了之类的事情。
因为游戏的逻辑处理部分都会在这里进行,cpu性能优化有很大一部分在这里进行,但是目前我们只需要一步一步的实现功能,优化的事情后续再说。
我们在初始化角色的时候存入到app这个目前作为model的存在里面去:
local player = Hero.new({
id = "me",
nickname = "beach",
level = ,
x = display.cx - ,
y = display.cy,
direction = -,
speed =
})
app:setObject("me", player) local enemy = Hero.new({
id = "enemy",
nickname = "bitch",
level = ,
y = display.cy,
x = display.cx + ,
direction =
})
app:setObject("enemy", enemy)
然后在战斗场景中讲对应的Sprite存放到一个Map里面,因为这里的View层所在:
spMaps = {} local manager = CCArmatureDataManager:sharedArmatureDataManager()
manager:addArmatureFileInfo("Zombie.png","Zombie.plist","Zombie.xml")
local attacker = app:getObject("me")
local attackerSp = CCArmature:create(attacker:getRes())
local animation = attackerSp:getAnimation()
animation:setSpeedScale(0.4)
animation:play("anim_walk")
attackerSp:setPosition(attacker:getX(), attacker:getY())
attackerSp:setScaleX(attacker:getDirection())
self.layer:addChild(attackerSp) local enemy = app:getObject("enemy")
local attackerSp1 = CCArmature:create(enemy:getRes())
local animation1 = attackerSp1:getAnimation()
animation1:setSpeedScale(0.2)
animation1:play("anim_walk")
attackerSp1:setPosition(enemy:getX(), enemy:getY())
attackerSp1:setScaleX(enemy:getDirection())
self.layer:addChild(attackerSp1) spMaps["me"] = attackerSp
spMaps["enemy"] = attackerSp1 self.layer:addNodeEventListener(cc.NODE_TOUCH_EVENT, function( event )
self.onTouch(event)
end)
self.layer:setTouchEnabled(true) controller = PlayerController.new() handler = scheduler.scheduleGlobal(self.onEnterFrame, 0.5)
然后在战斗场景的帧回调中调用PlayerController:tick()并且更新显示:
function FightScene:onEnterFrame()
controller:tick()
for key,sp in pairs(spMaps) do
local data = app:getObject(key)
if data ~= nil then
sp:setPosition(data:getX(), data:getY())
end
end
end
大概就是这个样子,其他的具体功能还有待实现。
下一步看心情研究一下扩展lua。
最后来一张目前的效果图:
Quick Cocos2dx controller的初步实现的更多相关文章
- Quick Cocos2dx Http通讯
服务端:Python 通讯协议:Http 参考文章: 1 用python实现一个基本的http server服务器 http://blog.sina.com.cn/s/blog_416e3063010 ...
- quick cocos2d-x 入门---井字棋
学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 . 我假设读者已经 http://wiki.quick-x.com/doku.php?id=zh_cn阅读了这个链 ...
- Mac下搭建quick cocos2d-x编译环境
一. 我知道在你的电脑中一定已经安装好了Xcode(没有自己下载去吧),打开Xcode,开启"偏好设置"对话框(commond + ,).假设打开之后出现的是这种一个对话框,那么直 ...
- 用Quick Cocos2dx做一个连连看(一)
呵呵,不知道能不能坚持下来,先写着吧. 预备知识:Quick Cocos2dx 2.2.5基本知识 或者 Cocos2dx基本知识, lua入门 开发工具:Sublime Text 2.0/3.0 原 ...
- quick cocos2dx 3.x 配置win32工程
公司项目主体部分用c++,而ui部分用lua写,所以选择了用quick框架.项目先开发了ios/mac版,这两天试着配置其win32工程,遇到一些问题,记录一下(纯c++版本cocos2dx配置方法应 ...
- quick cocos2d-x 2.2.4 window环境调试
BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ● ...
- Quick Cocos2dx MVC初步
今天看到了自己之前两年前写的一个地图编辑器, 写了不到一半就放弃了, 但是还是github上的小伙伴fork了, 真的感觉对不起那位伙计, 同时也鄙视一下一直以来懒得要死的自己, 希望这个demo不要 ...
- Quick Cocos2dx 初步战斗
呵呵,图片先来一发: 最近懒,很懒,连我自己都觉得有点可耻了. 但是实在没有什么东西啊,温水煮青蛙的什么的. 吐槽完成,以上. 目前完成了简单的战斗部分,AI还需要抽出来. 然后突然之间想到手游的帧频 ...
- quick cocos2dx lua 内存释放
前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...
随机推荐
- Inno Setup入门(九)——修改安装过程中的文字显示
前面说到过可以使用不用的语言文件实现不同的显示方式,方便与国际接轨,事实上即使没有语言文件也可以实现修改.[Messages]段用于定义安装程序和卸载程序中显示的消息.一般不需要创建 [Message ...
- nginx libpcre.so.1: cannot open shared object file
linux 64位安装nginx后启动出错报以下错误 1 2 3 [root@localhost nginx-1.3.0]# /usr/local/nginx/sbin/nginx error whi ...
- ng-if 和 ng-show/ng-hide 之间的区别
ng-if会移除dom,生成dom,而ng-show只是改变其display属性.所以你自己看着用吧.
- servlet多次跳转报IllegalStateException异常
当发生在如下错误的时候,有一个方案可行, "java.lang.IllegalStateException: Cannot forward after response has been c ...
- idea编译报错:未结束的字符串文字;非法的表达式;未结束的字符串字面值
在idea的Settings中,找到File Encodings,将IDE Encoding 改为UTF-8 要多试几次,清除缓存什么的,具体原因不知道,不过经常第一次修改不能成功.
- Hibernate 系列教程14-继承-PerTable策略
Employee public class Employee { private Long id; private String name; HourlyEmployee public class H ...
- Loadrunner之脚本的调试和保存(六)
一.调试脚本 脚本录制完毕后,按F5键或单击菜单上的RUN按钮,可以运行脚本. 在VIRTUAL USER GENERATOR中运行脚本的作用,主要是查看录制的脚本能否正常通过,如果有问题 ...
- ARC属性中还能使用assign,copy,retain这些关键字吗
http://blog.sina.com.cn/s/blog_6531b9b80101c6cr.html 很早以前比较弱,网上不知道哪里看了篇博文,留下了ARC属性中不能使用retain关键 ...
- linux 查看进程 和 杀死进程
ps ax 显示当前系统进程的列表 PID TTY STAT TIME COMMAND ps aux 显示当前系统进程详细列表以及进程用户 USER PID %CPU %ME ...
- Vector2.Angle 的 bug
获取角度 ,官方提供了 Vector2.Angle 来得值,他的值是在 0 ,180之间 原始代码是 public static float Angle(Vector3 from, Vector3 ...