스크립트 사용하기
스크립트 컴포넌트
스크립트 컴포넌트는 c++노드 개체를 확장하기 위한 방법입니다.
당신은 스크립트 컴포넌트를 노드에 바인딩하면 스크립트는 onEnter,onExit 및 update 이벤트를 받을수 있습니다.
스크립트 컴포넌트는 JavaScript 와 Lua 언어 를 지원합니다.
사용한 스크립트 컴포넌트는 바인딩된 스크립트의 언어와 매칭됩니다.
예를들면 ComponentJS 는 JavaScript 를 바인딩한다면 ComponentLua 는 Lua스크립트를 바인딩합니다.
스크립트 컴포넌트가 있으면 당신은 Cocos2d-x에서 아주 쉽게 스크립트를 사용할수 있습니다.
주의해야 할점은 프로젝트당 여러 언어를 혼합해서 사용하면 안됩니다.
프로젝트에서 JavaScript를 사용할건지 Lua를 사용할건지 결정하고 한가지만 사용해야 합니다.
Lua 스크립트 사용하기:
C++
// create a Sprite and add a LUA
component
auto player = Sprite::create("player.png");
auto luaComponent =
ComponentLua::create("player.lua");
player->addComponent(luaComponent);
Lua
-- 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 every frame
end
}
-- it is needed to return
player to let c++ nodes know it
return player
JavaScript 사용하기:
C++
// create a Sprite and add a LUA
component
auto player = Sprite::create("player.png");
auto jsComponent =
ComponentJS::create("player.js");
player->addComponent(jsComponent);
JavaScript
// 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 개체를 리턴해야 하고 JavaScript 컴포넌트를 사용할땐 스크립트는 cc.ComponentJS 를 extend 해서 사용해야 합니다.
더욱 자세한 사용법을 알고 싶으면 Cocos2d-x 엔진의 테스트 프로젝트인 tests/lua-tests/src/ComponentTest and tests/js-tests/src/ComponentTest。를 참고하세요.
출처: <http://cocos2d-x.org/docs/cocos2d-x/zh/scripting/>
'Cocos2d-x v3.17 > 고급 기능' 카테고리의 다른 글
[Cocos2d-x 고급기능]물리엔진 충돌판정 (0) | 2018.08.11 |
---|---|
[Cocos2d-x 고급기능]물리엔진 소개 및 용어 (0) | 2018.08.11 |
[Cocos2d-x 고급기능]BillBoard,3D파티클 시스템 (0) | 2018.08.11 |
[Cocos2d-x 고급기능]3D환경에서 자주 사용하는 툴 (2) | 2018.08.11 |
[Cocos2d-x 고급기능]지형 Terrain (0) | 2018.08.11 |