Cocos2d-x-使用脚本概述
Cocos2d-x-使用脚本概述
脚本组件
脚本组件是用来扩展C++节点对象的一种方式,你可以将脚本组件绑定到节点对象上,然后脚本组件就能收到onEnter
,onExit
和update
事件。
脚本组件支持两种脚本语言JavaScript和Lua,使用的脚本组件应该和绑定脚本的语言类型对应,比如ComponenetJS
用来绑定JavaScript脚本,ComponentLua
用来绑定Lua脚本。有了脚本组件,你就可以在Cocos2d-x的项目中,很方便的使用脚本进行一些控制。需要注意的是,在一个项目中不能混用脚本组件,也就是说一个项目要么只使用JavaScript脚本,要么只使用Lua脚本。
使用Lua脚本:
//创建一个精灵并增加Lua脚本组件
auto player = Sprite::create("player.png");auto luaComponent = ComponentLua::create("player.lua");
player->addComponent(luaComponent);
-- player.lualocal player = {onEnter = function(self)-- do some things in onEnterend,onExit = function(self)-- do some things in onExitend,update = function(self)-- do some things 在每一帧end
}-- 需要return player,让C++节点知道它
return player
使用JavaScript脚本:
//创建一个精灵并增加JS脚本组件
auto player = Sprite::create("player.png");auto jsComponent = ComponentJS::create("player.js");
player->addComponent(jsComponent);
// player.js
Player = cc.ComponentJS.extend({generateProjectile: function (x, y) {var projectile = new cc.Sprite("components/Projectile.png", cc.rect(0, 0, 20, 20));var scriptComponent = new cc.ComponentJS("src/ComponentTest/projectile.js");projectile.addComponent(scriptComponent);this.getOwner().getParent().addChild(projectile);// set positionvar winSize = cc.director.getVisibleSize();var visibleOrigin = cc.director.getVisibleOrigin();projectile.setPosition(cc.p(visibleOrigin.x + 20, visibleOrigin.y + winSize.height/2));// run actionvar posX = projectile.getPositionX();var posY = projectile.getPositionY();var offX = x - posX;var offY = y - posY;if (offX <= 0) {return;}var contentSize = projectile.getContentSize();var realX = visibleOrigin.x + winSize.width + contentSize.width/2;var ratio = offY / offX;var realY = (realX * ratio) + posY;var realDest = cc.p(realX, realY);var offRealX = realX - posX;var offRealY = realY - posY;var length = Math.sqrt((offRealX * offRealX) + (offRealY * offRealY));var velocity = 960;var realMoveDuration = length / velocity;projectile.runAction(cc.moveTo(realMoveDuration, realDest));},onEnter: function() {var owner = this.getOwner();owner.playerComponent = this;cc.eventManager.addListener({event: cc.EventListener.TOUCH_ALL_AT_ONCE,onTouchesEnded: function (touches, event) {var target = event.getCurrentTarget();if (target.playerComponent) {var location = touches[0].getLocation();target.playerComponent.generateProjectile(location.x, location.y);jsb.AudioEngine.play2d("pew-pew-lei.wav");}}}, owner);}
});
注意,两种组件的使用上,有一个重要的区别。使用Lua组件,Lua组件最后需要返回Lua对象,使用JavaScript组件,JavaScript脚本需要扩展cc.ComponentJS
。
Cocos2d-x-使用脚本概述相关推荐
- 4_Shell语言———脚本概述
一.初识脚本 简单说,脚本就是数条可执行语句的罗列.例如我们将以下可执行命令粘贴至first.sh 这个文件中: UserName=user1 mkdir /users useradd -d /use ...
- 【Linux】shell脚本概述
文章目录 前言 shell脚本的概念 shell脚本的结构 练习 1. 打印如下文本: 面试题 前言 本系列为循序渐进学运维系列的shell脚本实战部分,从零带你学脚本. shell脚本的概念 She ...
- 使用SQLCMD在SQLServer执行多个脚本
原文: 使用SQLCMD在SQLServer执行多个脚本 概述: 作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百 ...
- shell脚本详解(一)——Shell编程规范与变量
详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...
- linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战
课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...
- 脚本运行显示服务器超时,java执行shell脚本超时
java执行shell脚本超时 [2021-02-11 04:20:34] 简介: 系统运维 在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性.而shell 脚本参数作为变 ...
- Unity(一)Unity脚本程序开发
最近实验室有AR的项目,需要用Unity进行开发,一边学习一边把知识总结下来.在开始项目之前讨论过项目的技术方案,用Unity开发还是用Unreal开发,本人在两种游戏引擎上都有过初步的接触,认为Un ...
- Shell脚本——Shell编程规范及变量
Shell编程规范及变量 一.Shell脚本概述 1.1.1 Shell基本概念 1.1.2 Shell脚本应用场景 1.1.3 Shell作用--翻译官 二.shell编程规范 2.1 用户登录sh ...
- 如何使用Google Apps脚本构建YouTube Uploader Bot
Whenever you hear the word 'Bot' you probably imagine a robot like they show in the movies. They are ...
- Cocos2D中的Framerate状态
对于额外绘制调试物理引擎的支持,Cocos2D同样可以绘制概述计数器,尤其是帧速率(framerate)显示. 为了启用这些概述计数器标签,你只需添加如下一行代码,比如说在AppDelegate.m里 ...
最新文章
- python 实现延迟的操作
- json schema多种形式_什么是JSON Schema?
- springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
- 拍拍贷信贷申请审核竞赛模拟
- 四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)
- 朴素贝叶斯(Naive Bayes),“Naive”在何处?
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
- html 左侧 树形菜单,vue左侧菜单,树形图递归实现代码
- 2020年编程现状:Python将成为第一大编程语言,中国开源涨势最猛
- pygame小游戏(接球小游戏)
- 子文件夹的权限统一于E盘的权限
- 说说设计模式~桥梁模式(Bridge)
- hudson构建配置
- JVM(三)——类结构与类加载器
- FlashFXP中文破解 指南
- 多重继承--读松本行弘的程序世界
- Kinect2.0在win10平台上时断时续问题的解决办法
- 30分钟LINQ教程(转)
- C# 20行代码解析KRC歌词内容
- NodeJS之child_process模块