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框架的了解,我们可以参考\ ...
随机推荐
- SQL 列拆分
with CTE as( SELECT A.id, B.value FROM( SELECT id, value = CONVERT(xml,'<root><v>' + REP ...
- wl18xx module crash with "wlcore: ERROR ELP wakeup timeout!"
[ 111.322967] wlcore: ERROR ELP wakeup timeout![ 111.327636] ------------[ cut here ]------------[ 1 ...
- SQL查询表,表的所有字段名,SQL查询表,表的所有字段名
SQL查询表,表的所有字段名 2011-07-29 10:21:43| 分类: SQLServer | 标签:表 sql 字段 |举报 |字号 订阅 SQL查询表,表的所有字段名 SQ ...
- Oracle中清除BIN$开头的垃圾表的解决办法
10g的新特性flashback闪回区 在10g中bin开头表示已经删除的放在回收站的表,oracle在删除表时并没有彻底的删除,而是把表放入回收站!purge recyclebin清空回收站即可. ...
- CSS中如何把Span标签设置为固定宽度
一.形如<span>ABC</span>独立行设置SPAN为固定宽度方法如下: span {width:60px; text-align:center; display:blo ...
- Webdriver中实现区域截图的方式以及如何截取frame中的图片
import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOE ...
- UVA - 437 The Tower of Babylon(dp-最长递增子序列)
每一个长方形都有六种放置形态,其实可以是三种,但是判断有点麻烦直接用六种了,然后按照底面积给这些形态排序,排序后就完全变成了LIS的问题.代码如下: #include<iostream> ...
- 从内存溢出看Java 环境中的内存结构(转)
作为有个java程序员,我想大家对下面出现的这几个场景并不陌生,倍感亲切,深恶痛绝,抓心挠肝,一定会回过头来问为什么为什么为什么会这样,嘿嘿,让我们看一下我们日常在开发过程中接触内存溢出的异常: Ex ...
- wordpress安装插件--su
Add to Any: Subscribe Button 让读者方便的订阅你的博客到任何Feed阅读器 Google XML Sitemaps 生成完全兼容各大搜索引擎的Sitemaps/网站地图. ...
- MVC 创建Word文档
/// <summary> /// 创建一个word /// </summary> /// <returns></returns> public Act ...