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. List接口实现类-ArrayList、Vector、LinkedList集合深入学习以及源代码解析

    学习List接口实现类 ArrayList  Vector  LinkedList List接口的实现类中最经常使用最重要的就是这三个:ArrayList.Vector.LinkedList. JDK ...

  2. Restful 和 Jersey介绍(Web Service )

    一:REST简单介绍 REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(reso ...

  3. C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)

    本节主要讲new关键字和malloc函数的差别,编译器对构造函数调用的实质,单例模式的实现等. new和malloc的差别 1.malloc和free是C语言的库函数,以字节为单位申请堆空间.new和 ...

  4. 带dos调试窗口的win32程序

    #pragma comment( linker, "/subsystem:\"console\" /entry:\"WinMainCRTStartup\&quo ...

  5. 聊天气泡的绘制(圆角矩形+三角形+黑色边框,关键学会QPainter的draw函数就行了),注意每个QLabel都有自己的独立坐标

    头文件: #ifndef GLABEL_H #define GLABEL_H #include <QLabel> #include <QPainter> #include &l ...

  6. Windows Azure入门教学系列 (五):使用Queue Storage

    本文是Windows Azure入门教学的第五篇文章. 本文将会介绍如何使用Queue Storage.Queue Storage提供给我们一个云端的队列.我们可以用Queue Storage来进行进 ...

  7. Fibinary Numbers

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30506#problem/V 题意:从右向左,每一个位数,分别表示一个fibonacci数 ...

  8. Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

    1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...

  9. linux安装Eclipse c++环境

    yum install eclipse     yum install eclipse-cdt

  10. linux:sed高级命令之n、N(转)

    sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-comm ...