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框架的了解,我们可以参考\ ...
随机推荐
- list组件
<?xml version="1.0"?> <!-- Simple example to demonstrate the Spark List component ...
- Learn about images & containers
Learn about images & containers Docker Engine provides the core Docker technology that enables i ...
- nginx 中文文件名显示问题
VPS论坛里已经说过设置方法,不过貌似很多人还是会遇到中文乱码的问题,Apache可以使用mod_encoding支持中文目录和文件,LNMP下Nginx其实不需要安装额外的组件即可支持中文文件名或中 ...
- 常用 SQL语句
Oracle 查看所有表的名字: select table_name from user_tables; 查询特定表的名字:select * from (select table_name t fro ...
- HDU 2802 F(N)(简单题,找循环解)
题目链接 F(N) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- maven项目转成web项目
1.右键项目,Install Dynamic Web Module Facet
- java 数据结构 图
以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...
- lucene索引合并与增量索引
利用 Lucene,在创建索引的工程中你可以充分利用机器的硬件资源来提高索引的效率.当你需要索引大量的文件时,你会注意到索引过程的瓶颈是在往磁盘上写索引文件的过程中.为了解决这个问题, Lucene ...
- MySQL与MongoDB之SQL语法对比
- jquery中的页面加载方法load()
load方法会在元素的onload事件中绑定一个处理函数,如果处理函数绑定给window对象,则会在所有内容(包括窗口,框架,对象和图片等)加载完毕后触发, 如果处理函数绑定在元素上,则会在元素的内容 ...