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.lua
local player = {
onEnter = function(self)
-- do some things in onEnter
end,
onExit = function(self)
-- do some things in onExit
end,
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 position
var winSize = cc.director.getVisibleSize();
var visibleOrigin = cc.director.getVisibleOrigin();
projectile.setPosition(cc.p(visibleOrigin.x + 20, visibleOrigin.y + winSize.height/2));
// run action
var 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-使用脚本概述_cocos2d引擎 游戏脚本_ufgnix0802的博客-CSDN博客
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天, 点击查看活动详情