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. Adrnoid开发系列(二十五):使用AlertDialog创建各种类型的对话框

    AlertDialog能够生成各种内容的对话框.可是每种对话框都会有这样的的结构: 类似下边这样的的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTA ...

  2. 一个Sqrt谋杀触发功能

    我们平时常常会有一些数据运算的操作,须要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是怎样实现的?就拿最常常使用的sqrt函数来说吧.系统怎么来实现这个常常调用的函数呢? ...

  3. MSSQL - 根据时间倒序删除第一行数据

    delete top(1) from Tb_PaintOut where PaintNumber = (select top (1) PaintNumber from Tb_PaintOut orde ...

  4. 1数组的join方法

    function log(e) { console.log(e) } 有时候写console.log太长了,所以会自己写个这样的函数省去写console的步骤. 数组的join方法可以把一个数组按照j ...

  5. 基于visual Studio2013解决C语言竞赛题之1086任务分配

        题目 解决代码及点评 /************************************************************************/ /* ...

  6. Mac下MAMP初试体验

    原创文章,转载请注明出处! 近期小学习了一下Mac下的Apache,Mysql,php.这里记录一下,以备忘 1 php 1.1 php返回值的測试 在MAMP下測试成功,直接echo返回所数据 1. ...

  7. 网页 HTML

    HTML--超文本标记语言Hyper Text Markup Language. 一,常规标签 (1)格式控制(记忆模型--Word工具栏) <b></b>加粗,<i&g ...

  8. Servlet的学习(三)

    本篇接上一篇<Servlet的学习(二)> ,主要讲诉如何使用MyEclipse来开发Servlet,和导入Servlet所需要的源代码. 现在我们来创建一个web应用,就叫[myserv ...

  9. 窗口绘制有关的消息整理 WM_PAINT, WM_NCPAINT, WM_ERASEBKGND

    WM_PAINTWM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作. WM_NCPAINT当窗口客户区以外的部分(如窗口标题栏.菜单栏等)需要需要重 ...

  10. VS2010 编译安装boost库

    实践是最好的办法..学习C++,想试试线程,然后打算用boost库,结果boost库编译差点吓到我..没看到比较完整的安装教程..一直耽搁.今天动手.完成了.方法记录如下:1.下载boost从boos ...