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框架的了解,我们可以参考\ ...
随机推荐
- Unable to open connection to supplicant on "/data/misc/wifi/sockets/wlan0"
在调试android wifi UI 的时候,出现了 logcat: Unable to open connection to supplicant on "/data/misc/wifi ...
- 转 [分享一个SQL] 查会话阻塞关系,层次关系.
with ash as (select /*+ materialize*/* from DBA_HIST_ACTIVE_SESS_HISTORY where sample_time between ...
- apicloud本地测试安卓测试包安装
1.liutingdeMacBook-Pro:~ js-lt$ which adb 2.liutingdeMacBook-Pro:~ js-lt$ ls 3.liutingdeMacBook-Pro: ...
- Swift & OC 混编 浅析
转载自:http://www.infoq.com/cn/articles/wangyi-cartoon-swift-mixed-practice?utm_campaign=rightbar_v2&am ...
- sockaddr_u详解
struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; ...
- lucene的两种分页操作
基于lucene的分页有两种: lucene3.5之前分页提供的方式为再查询方式(每次查询全部记录,然后取其中部分记录,这种方式用的最多),lucene官方的解释:由于我们的速度足够快.处理海量数据时 ...
- Python基础学习8---list列表的操作
a_list = ['hello','world',1,'shanghai',3.99] #列表添加操作的4种方法 #1. 通过+ 字符来拼接 a_list = a_list + [1,'wuhan' ...
- Linux学习 -- Shell编程 -- 字符处理命令
sort排序命令 sort [选项] 文件名 -f 忽略大小m写 -n 按数值型,默认字符串型 -r 反向 -t 指定分隔符 -k n[,m] 指定字段范围,默认行尾 eg. sort -n -t & ...
- TM3、4波段GeoTiff数据计算NDVI
源码: 1: PRO TIFF_NDVI,F1,F2,FOUT 2: F1 = DIALOG_PICKFILE(TITLE = 'B4 TIFF',FILTER='*.TIF',/READ) 3: ...
- Day05_JAVAEE系列:XML
XML概述 1)什么是xml? xml, eXtend Markup Language, 可扩展标记语言 2) html vs xml 都由w3c组织制定的. html语法特征:语法比较松散 ...