很久没有记笔记了,今天记一下,最近都在瞎忙活,都不知道自己干了些啥。

我的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。

Github源码地址

最后来一张目前的效果图:

Quick Cocos2dx controller的初步实现的更多相关文章

  1. Quick Cocos2dx Http通讯

    服务端:Python 通讯协议:Http 参考文章: 1 用python实现一个基本的http server服务器 http://blog.sina.com.cn/s/blog_416e3063010 ...

  2. quick cocos2d-x 入门---井字棋

    学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 . 我假设读者已经 http://wiki.quick-x.com/doku.php?id=zh_cn阅读了这个链 ...

  3. Mac下搭建quick cocos2d-x编译环境

    一. 我知道在你的电脑中一定已经安装好了Xcode(没有自己下载去吧),打开Xcode,开启"偏好设置"对话框(commond + ,).假设打开之后出现的是这种一个对话框,那么直 ...

  4. 用Quick Cocos2dx做一个连连看(一)

    呵呵,不知道能不能坚持下来,先写着吧. 预备知识:Quick Cocos2dx 2.2.5基本知识 或者 Cocos2dx基本知识, lua入门 开发工具:Sublime Text 2.0/3.0 原 ...

  5. quick cocos2dx 3.x 配置win32工程

    公司项目主体部分用c++,而ui部分用lua写,所以选择了用quick框架.项目先开发了ios/mac版,这两天试着配置其win32工程,遇到一些问题,记录一下(纯c++版本cocos2dx配置方法应 ...

  6. quick cocos2d-x 2.2.4 window环境调试

    BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ● ...

  7. Quick Cocos2dx MVC初步

    今天看到了自己之前两年前写的一个地图编辑器, 写了不到一半就放弃了, 但是还是github上的小伙伴fork了, 真的感觉对不起那位伙计, 同时也鄙视一下一直以来懒得要死的自己, 希望这个demo不要 ...

  8. Quick Cocos2dx 初步战斗

    呵呵,图片先来一发: 最近懒,很懒,连我自己都觉得有点可耻了. 但是实在没有什么东西啊,温水煮青蛙的什么的. 吐槽完成,以上. 目前完成了简单的战斗部分,AI还需要抽出来. 然后突然之间想到手游的帧频 ...

  9. quick cocos2dx lua 内存释放

    前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...

随机推荐

  1. C: Run a System Command and Get Output? 在C程序中调用工具,并且得到结果。

    现在在做一个WIFI API相关的库,这样就可以让其他的人管理WIFI. 在调用API的时候要回复SHELL打印的信息,比如说搜索热点,而且不在SHELL中打印出来.然后把信息返回给调用API的程序. ...

  2. keepalived 健康检测

    1.TCP方式 详见:http://www.cnblogs.com/tengpan-cn/p/5776574.html 以下内容,都是基于此进行修改 2.HTTP_GET 根据返回状态判断服务器是否正 ...

  3. 简单粗暴的“Debug模式”

    在项目中,通常会遇到:调试程序和程序在线上运行时程序运行的参数不一样, 例如线上运行时程序是获取线上的机器的ip,而调试程序时,我们会指定一个ip进行调试. 又或者项目要与多个系统进行数据交换,调试的 ...

  4. HTML+CSS D07 边框、div

    1.边框(border) 常用表达 border-width px thin 定义细的边框. medium 默认.定义中等的边框. thick 定义粗的边框. length 允许您自定义边框的宽度. ...

  5. linux视频学习5(top, 网络监控

    top命令的详解: 1. top :动态监控进程. 第一行:当前系统时间:  up  4days :服务器启动后的持续时间. 5 user 当前服务器上的用户数目 ; load average :负载 ...

  6. ReactiveCocoa / RxSwift 笔记一

    原创:转载请注明出处 ReactiveCocoa / RxSwift Native app有很大一部分的时间是在等待事件发生,然后响应事件,比如 1.等待网络请求完成, 2.等待用户的操作, 3.等待 ...

  7. linux系统定时重启tomcat

    #touch auto-start.sh [root@Linux opt]# echo $LANGen_US.UTF-8 #vim auto-start.sh #!/bin/sh export LAN ...

  8. FZU Problem 1895 整除45问题(整除问题+字符串维护+优化)

    这个题有点烧脑啊,但是只要想清楚被45整除的数,肯定能被5和9整除,能被9整除的数各位加起来肯定是9的倍数,能被5整除的末尾是0或5. 然后dfs的过程稍微不太好懂,还有几个优化必须要注意.dfs的过 ...

  9. 二叉树,平衡树,红黑树,B~/B+树汇总

    二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树 ...

  10. Disassembly1:HelloWorld

    我这里学习汇编语言的思路就是逆向C++源码. 先从最简单的一个程序入手: