cocos2d-x(十二)Lua开发飞机大战-7-加入敌机
Lua本是一门面向过程的解释性语言。但在开发过程中有很多人还是习惯于面向对象编程。在Lua中我们能够使用table模拟类。只是写起来不太爽(特别是在继承一些C++类的时候)。通过查看演示样例。发现cocos2d-x\samples\Lua\TestLua\Resources\luaScript路径下有一个“extern.lua”文件,这个文件封装对怎样创建一个类,而且十分easy继承C++类。
这里仅仅介绍extern.lua的当中的两个方法,也是我们接下来要用到的两个方法。
1.function class(classname, super) 这种方法用于声明一个类,第一个參数是你要定义的类名,第二个參数要继承的父类实体(从參数中能够发现仅仅是实现单继承)。
2.function clone(Object) 这种方法用于复制对象
回到正题,想要增添敌机,第一件事想到肯定是定义一个敌机的实体类,那我们定义一个吧,在EnemyLayer.lua文件里定义Enemy实体类
require "Lua/extern"
Enemy = class("Enemy", function(frame)
local sprite = CCSprite:createWithSpriteFrameName(frame)
local peer = {}
tolua.setpeer(sprite,peer)
return sprite
end
)
Enemy.__index = Enemy function Enemy:create(frame,life,score,level)
local enemy = Enemy.new(frame)
local peer = tolua.getpeer(enemy)
peer.life = life--敌机的生命值
peer.score = score--打爆这架敌机,可获得的分数
peer.level = level--敌机的等级,图片资源中有三种敌机
return enemy
end function Enemy:getLife()
return tolua.getpeer(self).life
end function Enemy:getLevel()
return tolua.getpeer(self).level
end function Enemy:getScore()
return tolua.getpeer(self).score
end function Enemy:loseLife()
tolua.getpeer(self).life = tolua.getpeer(self).life - 1
end
有了敌机,我们再创建一个敌机图层
function create()
layer = CCLayer:create()
start()
return layer
end
start()方法将全部敌机加入到图层中
local enemyAEntry = nil
local enemyBEntry = nil
local enemyCEntry = nil
function start()
enemyAEntry = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(addEnemyA, 3,false)
enemyBEntry = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(addEnemyB, 1,false)
enemyCEntry = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(addEnemyC, 10,false)
end
在这儿就仅仅贴出加入敌机A方法的代码addEnemyA(),其它两个都与这个类似。
local Enemy_A_Life = 1
local Enemy_B_Life = 2
local Enemy_C_Life = 3 local Enemy_A_SCORE = 5
local Enemy_B_SCORE = 10
local Enemy_C_SCORE = 15 local Enemy_A_Level = 1
local Enemy_B_Level = 2
local Enemy_C_Level = 3 local layer = nil local enemyArray = {}
function addEnemyAB(frameName,life,score,level) local enemy = Enemy:create(frameName,life,score,level)
local enemyASizie = enemy:getContentSize()
local minX = enemyASizie.width / 2
local maxX = visibleSize.width - (enemyASizie.width / 2)
local rangX = maxX - minX
local actualX = (math.random() * rangX) + minX enemy:setPosition(ccp(actualX,visibleSize.height + enemyASizie.height / 2))
layer:addChild(enemy)
table.insert(enemyArray,enemy) local minDuration = 10
local maxDuration = 20
local rangeDur = maxDuration - minDuration
local actuakDur = (math.random() * rangeDur) + minDuration local actionMove = CCMoveTo:create(actuakDur,ccp(actualX,0 - enemy:getContentSize().height / 2))
local actionDone = CCCallFuncN:create(removeEnemy)
local sequence = CCSequence:createWithTwoActions(actionMove,actionDone)
enemy:runAction(sequence) end function addEnemyA()
addEnemyAB("enemy1.png",Enemy_A_Life,Enemy_A_SCORE,Enemy_A_Level)
end
enemyArray这个參数用来存放全部的敌机,在后面的碰撞检測时会实用处。
本计划将代码整理后再上传,无赖这段时间太忙,没时间整理,也不知道什么时候有时间更新博文。
所以今天先将全部代码上传一份吧。方便大家学习交流。
cocos2d-x(十二)Lua开发飞机大战-7-加入敌机的更多相关文章
- cocos2d-x(十一)Lua开发飞机大战-6-加入子弹
接下来我们为飞机加入子弹,首先创建一个BulletLayer: module("BulletLayer",package.seeall) local bulletBatchNode ...
- Python之游戏开发-飞机大战
Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...
- .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查.分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL).同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要 ...
- javaweb学习总结二十二(servlet开发中常见的问题汇总)
一:web应用的映射问题 通常我们从别人那里拷贝来的代码,自己会修改应用的名称,但是web映射的访问路径并没有修改,还是原来的映射. 解决方法: 工程右键--properties--myeclipse ...
- cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角
二战中被称为二战飞机飞机,当然,以飞机作业.这是一个游戏,我们必须加入一个飞机--这是我们的英雄. 首先创建一个层(PlaneLayer)要显示飞机.然后,create飞机初始化方法 module(& ...
- IOS学习之路五(SpriteKit 开发飞机大战小游戏一)
参考SpriteKit 创建游戏的教程今天自己动手做了一下,现在记录一下自己怎么做的,今天之做了第一步,一共有三个部分. 第一步,项目搭建. 项目所用图片资源:点击打开链接 1.在Xcode打开之后, ...
- 六十二 Web开发 使用模板
Web框架把我们从WSGI中拯救出来了.现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了. 但是,Web App不仅仅是处理逻辑,展示给用户的页面也非常重要.在函数中返回一 ...
- 纯JavaScript开发飞机大战项目
开发工具: HBuilder 编程语言:JavaScript 其他技术:Html + Css 项目截图: 视频: 源代码: 在线观看地址: (暂无) 百度网盘下载地址: 请加QQ群:915 ...
- DDD实战进阶第一波(十二):开发一般业务的大健康行业直销系统(订单上下文POCO模型)
在本系列前面的文章中,我们主要讨论了产品上下文与经销商上下文相关的实现,大家对DDD的方法与架构已经有了初步的了解. 但是在这两个界限上下文中,业务逻辑很简单,也没有用到更多的值对象的内容.从这篇文章 ...
随机推荐
- JSP页面小脚本实现日期比較,Java同理,精简过后的,可能在效率上不太好,有大大能够给优化下就更好了
<% java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd ...
- 学习算法-基数排序(radix sort)卡片分类(card sort) C++数组实现
基数排序称为卡片分类,这是一个比较早的时间越多,排名方法. 现代计算机出现之前,它已被用于排序老式打孔卡. 说下基数排序的思想.前面我有写一个桶式排序,基数排序的思想是桶式排序的推广. 桶式排序:ht ...
- IIS Web服务扩展中添加ASP.NET4.0
问题 服务器上安装了ASP.NET 4.0.30319组件,但是在IIS的Web服务扩展中并没有找到ASP.NET v4.0.30319这项,这导致基于.NET4.0开发的网页都无法正常浏览(404错 ...
- 程序员必须知道的几个Git代码托管平台(转)
上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...
- javascript面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂 ...
- smartforms初始化
smartforms 第一次打开的页面是和prd环境下的一样,需要跑一个程序才能编辑
- IOS 可靠性测试 iosMonkey
UI AutoMonkey UI AUtoMonkey是一款非常简单的IOS压力测试工具.通过它,你可以向ios设备发送滑动.拖动.旋转.甚至锁屏和解锁指令.原文github地址:https://gi ...
- Net基础恶补
一 自定义事件 1 之前一直都是使用事件调用来触发事件,看代码 // 定义一个事件 public event EventHandler; //触发事件 public void OnEvent(){ i ...
- java中完美打包
前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...
- NumberFormat 类
NumberFormat 表示数字的格式化类, 即:能够依照本地的风格习惯进行数字的显示. 此类的定义例如以下: public abstract class NumberFormat extends ...