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这个參数用来存放全部的敌机,在后面的碰撞检測时会实用处。

本计划将代码整理后再上传,无赖这段时间太忙,没时间整理,也不知道什么时候有时间更新博文。

所以今天先将全部代码上传一份吧。方便大家学习交流。

源代码下载http://download.csdn.net/detail/yifuteli/7305869

cocos2d-x(十二)Lua开发飞机大战-7-加入敌机的更多相关文章

  1. cocos2d-x(十一)Lua开发飞机大战-6-加入子弹

    接下来我们为飞机加入子弹,首先创建一个BulletLayer: module("BulletLayer",package.seeall) local bulletBatchNode ...

  2. Python之游戏开发-飞机大战

    Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...

  3. .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现

    本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查.分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL).同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要 ...

  4. javaweb学习总结二十二(servlet开发中常见的问题汇总)

    一:web应用的映射问题 通常我们从别人那里拷贝来的代码,自己会修改应用的名称,但是web映射的访问路径并没有修改,还是原来的映射. 解决方法: 工程右键--properties--myeclipse ...

  5. cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角

    二战中被称为二战飞机飞机,当然,以飞机作业.这是一个游戏,我们必须加入一个飞机--这是我们的英雄. 首先创建一个层(PlaneLayer)要显示飞机.然后,create飞机初始化方法 module(& ...

  6. IOS学习之路五(SpriteKit 开发飞机大战小游戏一)

    参考SpriteKit 创建游戏的教程今天自己动手做了一下,现在记录一下自己怎么做的,今天之做了第一步,一共有三个部分. 第一步,项目搭建. 项目所用图片资源:点击打开链接 1.在Xcode打开之后, ...

  7. 六十二 Web开发 使用模板

    Web框架把我们从WSGI中拯救出来了.现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了. 但是,Web App不仅仅是处理逻辑,展示给用户的页面也非常重要.在函数中返回一 ...

  8. 纯JavaScript开发飞机大战项目

    开发工具: HBuilder 编程语言:JavaScript 其他技术:Html + Css 项目截图:   视频:   源代码:   在线观看地址: (暂无) 百度网盘下载地址: 请加QQ群:915 ...

  9. DDD实战进阶第一波(十二):开发一般业务的大健康行业直销系统(订单上下文POCO模型)

    在本系列前面的文章中,我们主要讨论了产品上下文与经销商上下文相关的实现,大家对DDD的方法与架构已经有了初步的了解. 但是在这两个界限上下文中,业务逻辑很简单,也没有用到更多的值对象的内容.从这篇文章 ...

随机推荐

  1. 透过表象看本质!?之三——Kalman滤波

    数据拟合能够估计出数据变化的趋势,另外一个同等重要的应用是如何利用这一趋势,预测下一时刻数据可能的值.通俗点儿说,你观察苍蝇(蚊子,蜜蜂)飞了几秒,你也许会想“它下一个时刻可能在哪儿”,“呈现出什么样 ...

  2. linux环境: shell初始化文件, for TCSH, CSH

    TCSHELL, CSHELL 配置文件 全局配置文件 /etc/csh.cshrc个人配置文件 ~/.cshrc或~/.tcshrc 参考: 1.配置你的csh/tcsh,  https://wik ...

  3. 8天玩转并行开发——第三天 plinq的使用

    原文 8天玩转并行开发——第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的 年代如果 ...

  4. 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961674 写视频文件 Ø 新建菜单项,Learning OpenCV——> OpenCVr ...

  5. 弹出框weeboxs 基本属性总结

    使用前需包含以下jquery.js.bgiframe.js.weebox.js文件 boxid: null, //设定了此值只后,以后在打开同样boxid的弹窗时,前一个将被自 动关闭 boxclas ...

  6. HDU 4709 Herding 几何题解

    求全部点组成的三角形最小的面积,0除外. 本题就枚举全部能够组成的三角形,然后保存最小的就是答案了.由于数据量非常少. 复习一下怎样求三角形面积.最简便的方法就是向量叉乘的知识了. 并且是二维向量叉乘 ...

  7. doT js模板入门

    doT.js github地址: doT.js 官方站点 实例1:简单 <!DOCTYPE html> <html lang="en"> <head& ...

  8. 怎样改动Myeclipse10.7的Servlet模板

    (1)在myeclipse10.0曾经的版本号中咱庄文件夹仅仅有叶仅仅需找到plugins在文件夹下找到: com.genuitec.eclipse.wizards_9.0.0.me201211011 ...

  9. sap的示例代码

    sap的示例代码查看1.在SE38环境下的程序名输入栏输入'DEMO*'后按F4,你可以查到SAP所有的DEMO示例程序,好好看看,你会学到很多ABAP功能的实现方法.2.运行“ABAPDOCU”T- ...

  10. Oracle 执行计划了的rows概念

    alter session set statistics_level=all; select t1.* from t1,t2 where t1.id=t2.id and t1.id<3; sel ...