Cocos2d-x-使用脚本概述

脚本组件

  脚本组件是用来扩展C++节点对象的一种方式,你可以将脚本组件绑定到节点对象上,然后脚本组件就能收到onEnteronExitupdate事件。

  脚本组件支持两种脚本语言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-使用脚本概述相关推荐

  1. 4_Shell语言———脚本概述

    一.初识脚本 简单说,脚本就是数条可执行语句的罗列.例如我们将以下可执行命令粘贴至first.sh 这个文件中: UserName=user1 mkdir /users useradd -d /use ...

  2. 【Linux】shell脚本概述

    文章目录 前言 shell脚本的概念 shell脚本的结构 练习 1. 打印如下文本: 面试题 前言 本系列为循序渐进学运维系列的shell脚本实战部分,从零带你学脚本. shell脚本的概念 She ...

  3. 使用SQLCMD在SQLServer执行多个脚本

    原文: 使用SQLCMD在SQLServer执行多个脚本 概述: 作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百 ...

  4. shell脚本详解(一)——Shell编程规范与变量

    详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...

  5. linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战

    课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...

  6. 脚本运行显示服务器超时,java执行shell脚本超时

    java执行shell脚本超时 [2021-02-11 04:20:34]  简介: 系统运维 在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性.而shell 脚本参数作为变 ...

  7. Unity(一)Unity脚本程序开发

    最近实验室有AR的项目,需要用Unity进行开发,一边学习一边把知识总结下来.在开始项目之前讨论过项目的技术方案,用Unity开发还是用Unreal开发,本人在两种游戏引擎上都有过初步的接触,认为Un ...

  8. Shell脚本——Shell编程规范及变量

    Shell编程规范及变量 一.Shell脚本概述 1.1.1 Shell基本概念 1.1.2 Shell脚本应用场景 1.1.3 Shell作用--翻译官 二.shell编程规范 2.1 用户登录sh ...

  9. 如何使用Google Apps脚本构建YouTube Uploader Bot

    Whenever you hear the word 'Bot' you probably imagine a robot like they show in the movies. They are ...

  10. Cocos2D中的Framerate状态

    对于额外绘制调试物理引擎的支持,Cocos2D同样可以绘制概述计数器,尤其是帧速率(framerate)显示. 为了启用这些概述计数器标签,你只需添加如下一行代码,比如说在AppDelegate.m里 ...

最新文章

  1. python 实现延迟的操作
  2. json schema多种形式_什么是JSON Schema?
  3. springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
  4. 拍拍贷信贷申请审核竞赛模拟
  5. 四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)
  6. 朴素贝叶斯(Naive Bayes),“Naive”在何处?
  7. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
  8. html 左侧 树形菜单,vue左侧菜单,树形图递归实现代码
  9. 2020年编程现状:Python将成为第一大编程语言,中国开源涨势最猛
  10. pygame小游戏(接球小游戏)
  11. 子文件夹的权限统一于E盘的权限
  12. 说说设计模式~桥梁模式(Bridge)
  13. hudson构建配置
  14. JVM(三)——类结构与类加载器
  15. FlashFXP中文破解 指南
  16. 多重继承--读松本行弘的程序世界
  17. Kinect2.0在win10平台上时断时续问题的解决办法
  18. 30分钟LINQ教程(转)
  19. C# 20行代码解析KRC歌词内容
  20. NodeJS之child_process模块

热门文章

  1. 【每日算法Day 70】图解算法:小学生都会的数块数问题,你会吗?
  2. NLP学习—23.基于Transformer的机器翻译实战
  3. 百面机器学习—9.前馈神经网络面试问题总结
  4. 6.2 API : RandomForestClassifier与RandomForestRegressor
  5. 解决过拟合现象的六种姿势
  6. 深度学习花书- 4.3 基于梯度的优化方法
  7. 保持稳定迭代的秘密:基于Spinnaker的全自动渐进式交付
  8. 《大数据——大价值、大机遇、大变革》试读
  9. 微软全球资深副总裁张亚勤先生力作——《变革中思索》连载
  10. 面向对象之自动绑定数据源