如何运行一一操作?
How to run action one by one?
嗨,我想在 Cocos2d-js 和 flipX3d(duration) 中制作翻转卡片动画,因为这里是我的代码应用程序失败。
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 应该有所帮助,但它会忽略它并同时启动。感谢您的帮助。
即使我将它拆分成函数然后按顺序调用它也会同时启动。
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);
}
});
试试这个:
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));
问题在于,当您想要对同一序列中的不同对象执行 运行 操作时,您需要使用 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 size = cc.winSize;
之前定义 var that = this;
好地方。
PS:请注意,在 v3.x 中,如果您使用开始的方法版本,则无需在操作中使用 new
和 .create()
小写,即:cc.sequence
等于 new cc.Sequence.create
.
快速警告:如果您希望同时对两个对象使用您在某处定义的操作(即 pop
),您需要添加一个 .clone()
在您调用它的每个地方(即:that.pomoc.runAction(pop.clone());
)。
嗨,我想在 Cocos2d-js 和 flipX3d(duration) 中制作翻转卡片动画,因为这里是我的代码应用程序失败。
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 应该有所帮助,但它会忽略它并同时启动。感谢您的帮助。
即使我将它拆分成函数然后按顺序调用它也会同时启动。
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);
}
});
试试这个:
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));
问题在于,当您想要对同一序列中的不同对象执行 运行 操作时,您需要使用 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 size = cc.winSize;
之前定义 var that = this;
好地方。
PS:请注意,在 v3.x 中,如果您使用开始的方法版本,则无需在操作中使用 new
和 .create()
小写,即:cc.sequence
等于 new cc.Sequence.create
.
快速警告:如果您希望同时对两个对象使用您在某处定义的操作(即 pop
),您需要添加一个 .clone()
在您调用它的每个地方(即:that.pomoc.runAction(pop.clone());
)。