嗨我想在Cocos2d-js和flipX3d(持续时间)制作翻转卡片动画,导致应用程序失败,这是我的代码。
var MenuLayer = cc.Layer.extend({
spriteBG:null,
ctor:function () {
this._super();
this.init();
},
init:function() {
var size = cc.winSize;
var closeItem = new cc.MenuItemImage(
res.CloseNormal_png,
res.CloseSelected_png,
function () {
cc.log("Close is clicked!");
}, this);
closeItem.attr({
x: size.width - 20,
y: 20,
anchorX: 0.5,
anchorY: 0.5
});
var menu = new cc.Menu(closeItem);
menu.x = 0;
menu.y = 0;
this.addChild(menu, 1);
this.spriteBG = new cc.Sprite(res.MenuBG);
this.spriteBG.attr({
x: size.width / 2,
y: size.height / 2,
scale: 1.5
});
this.addChild(this.spriteBG, 0);
this.pomoc = new cc.Sprite(res.Card_Back);
this.pomoc.setPosition(size.width/3, size.height/3);
this.addChild(this.pomoc, 2, 1);
this.pomoc1 = new cc.Sprite(res.Card_Back);
this.pomoc1.setPosition(size.width/3, size.height/3);
this.pomoc1.runAction(cc.scaleTo(0, 0, 1));
this.addChild(this.pomoc1, 2, 1);
cc.FlipX3D
var startButton = new cc.MenuItemSprite(
new cc.Sprite(res.Start_1),
new cc.Sprite(res.Start_2),
function(){
cc.log("==start clicked");
var pop = cc.scaleTo(0.5, 0, 1);
var pop1 = cc.scaleTo(0.5, 1, 1);
var seq = new cc.Sequence(this.pomoc.runAction(pop),this.pomoc1.runAction(pop1));
},this
);
var Start = new cc.Menu(startButton);
Start.setPosition(size.width/2, size.height/2)
this.addChild(Start);
}
});
var MenuScene = cc.Scene.extend({
onEnter:function () {
this._super();
var layer = new MenuLayer();
this.addChild(layer);
}
});
问题是pop并且pop1立即启动我需要pop,然后pop1。 Sequance应该有所帮助,但它会忽略它并同时开始。谢谢你的帮助。
即使我将其拆分为函数然后以sequance调用它也会同时启动。
var MenuLayer = cc.Layer.extend({
spriteBG:null,
ctor:function () {
this._super();
this.init();
},
init:function() {
var size = cc.winSize;
var closeItem = new cc.MenuItemImage(
res.CloseNormal_png,
res.CloseSelected_png,
function () {
cc.log("Close is clicked!");
}, this);
closeItem.attr({
x: size.width - 20,
y: 20,
anchorX: 0.5,
anchorY: 0.5
});
var menu = new cc.Menu(closeItem);
menu.x = 0;
menu.y = 0;
this.addChild(menu, 1);
this.spriteBG = new cc.Sprite(res.MenuBG);
this.spriteBG.attr({
x: size.width / 2,
y: size.height / 2,
scale: 1.5
});
this.addChild(this.spriteBG, 0);
this.pomoc = new cc.Sprite(res.Card_Back);
this.pomoc.setPosition(size.width/3, size.height/3);
this.addChild(this.pomoc, 2, 1);
this.pomoc1 = new cc.Sprite(res.Card_Back);
this.pomoc1.setPosition(size.width/3+10, size.height/3+10);
this.pomoc1.runAction(cc.scaleTo(0, 0, 1));
this.addChild(this.pomoc1, 2, 1);
var startButton = new cc.MenuItemSprite(
new cc.Sprite(res.Start_1),
new cc.Sprite(res.Start_2),
function(){
cc.log("==start clicked");
cc.Sequence.create(this.pom1(),this.pom2());
},this
);
var Start = new cc.Menu(startButton);
Start.setPosition(size.width/2, size.height/2)
this.addChild(Start);
},
pom1: function(){
this.pomoc.runAction(cc.scaleTo(0.5, 0, 1));
},
pom2:function(){
this.pomoc1.runAction(cc.scaleTo(1, 1, 1));
}
});
var MenuScene = cc.Scene.extend({
onEnter:function () {
this._super();
var layer = new MenuLayer();
this.addChild(layer);
}
});
答案 0 :(得分:0)
试试这个:
this.pomoc.runAction(cc.Sequence.create(pop, cc.CallFunc.create(startPop1, this)));
function startPop1(obj) {
this.pomoc1.runAction(pop1);
}
或:
this.pomoc.runAction(pop);
this.pomoc1.runAction(cc.Sequence.create(cc.DelayTime.create(popActionDuration), pop1));
答案 1 :(得分:0)
问题在于,当您想在同一序列中的不同对象上运行操作时,需要使用callFunc
。但是你也应该记住(据我所知)callFunc
没有办法告诉Sequence
它在结束时包装它,所以你应该放Delay
那里。
你如何使用它也有点奇怪..什么时候应该运行?定义seq
应该只创建序列。但不执行它。
保持你做事的风格,你应该替换它:
var seq = new cc.Sequence(this.pomoc.runAction(pop),this.pomoc1.runAction(pop1));
有了这个:
var seq = cc.sequence(
cc.callFunc(function(){that.pomoc.runAction(pop);}),
cc.delay(1),
cc.callFunc(function(){that.pomoc1.runAction(pop1);})
);
但如果是我,我会这样做(无论你想要执行序列的地方):
this.pomoc.runAction(
cc.sequence(
pop,
cc.callFunc(function(){that.pomoc1.runAction(pop1);})
)
);
这应该在pop
上运行this.pomoc
,在结束时 执行callFunc
。恕我直言,这是你最好的选择。
请注意,在callFunc
中,this
将没有您期望的含义,因此您应该在var that = this;
成为好之前定义var size = cc.winSize;
的地方。
PS:请注意,在v3.x中,如果使用以小写字母开头的方法版本,则不需要在操作中使用new
和.create()
,即:{{1 }等于cc.sequence
。
快速警告:如果您希望同时在两个对象上使用您在某处定义的操作(即new cc.Sequence.create
),则需要在每个对象上添加pop
你称之为的地方(即:.clone()
)。