我在Starling编写棋盘游戏(动作脚本3)。我正在使用的Starling版本有一个名为Sprite3D的类,它允许我方便且容易地编写用于此游戏的卡片翻转代码。我感到困惑的是,我的卡在翻转时发生了尺寸变化,我无法找到变化的来源。什么原因导致此卡更改尺寸? [视频和代码]
所有帮助表示赞赏。
该问题可以在this youtube video上查看。
该代码可以在github上完整查看this github page。
我会在这里继续了解更多详情...视频中涵盖了以下所有信息。
Card类不包含可视信息。它是一个控制器类。它拥有两个精灵。一个精灵填充正面,另一个精灵填充背面。卡类还具有应用蒙版和尺寸属性,以便面的大小和形状相同。
Card类还包含动画代码。动画片的代码与Starling博客中的视频代码非常相似,该视频展示了Stage3D如何在2D内存中非常快速和轻松地实现。 Card类通过使用补间将卡的rotationY
属性从0更改为PI,并将触发事件中的PI更改为0,从而动画轮播。在翻转过程中出现的错误,所以我会包括弹射代码在这里:
public function flip() : void {
_state = !(this._state);
if(this.animations){
var tween : starling.animation.Tween = new Tween(this, 2, starling.animation.Transitions.EASE_OUT_BOUNCE);
var card : Card = this;
var didFlip : Boolean = false;
tween.animate("rotationY", this._state == Card.FACE_UP ? Math.PI : 0);
tween.onUpdate = updateVisibility;
Starling.juggler.add(tween);
}
}
private function updateVisibility():void
{
var sHelper:Vector3D = new Vector3D();
var card : Card = this;
stage.getCameraPosition(card, sHelper);
if(sHelper){
this._front_face.visible = sHelper.z < 0;
this._back_face.visible = sHelper.z >= 0;
}
}
的FrontFace和背面类从类CardFace都派生。 CardFace类将卡片作为参考,并设置一个与卡片的蒙版尺寸和形状相同的蒙版。这可能是多余的,因为该卡片的遮罩应掩盖所有儿童的DisplayObject,但我们仍然要这样做。
BackFace具有文字,徽标,纹理和颜色。
FrontFace不做任何事情。它具有特定行为的子类,并将数据对象转换为显示布局。
在这种情况下,我们使用ProfileFrontFace对FrontFace进行子类化。 ProfileFrontFace将卡对象和一个配置文件数据对象作为构造函数参数。卡对象通过super()调用传递给CardFace,并且该配置文件对象被保存以供以后使用。
当ProfileFrontFace被添加到阶段时,类将从配置文件数据对象中提取标题,收入和费用。它为每个这些项目创建文本字段。它还计算现金流量并为此值创建文本字段。背景是使用PNG纹理创建的,该纹理是一个简单的白色正方形,可以在卡片的整个面上进行拉伸。在这个白色方块上,我们应用了一种颜色纹理。创建后,背景图像不会更改。代码如下所示:
//we remove the event listener so this function code is only executed once
this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
var width : int = this.cardWidth; /* 400 */
var height : int = this.cardHeight; /* 300 */
var bg : Image = new Image(Game.assets.getTexture("blank"));
/* start the background in the top left */
bg.x = 0;
bg.y = 0;
/* have the background fill the card dimension space */
bg.width = width;
bg.height = height;
/* apply a color so that the background is not pure white */
bg.color = ColorScheme.OPAL;
/* add the background to the stage */
this.addChild(bg);
在函数的其余部分,我们创建文本并显示它。为了简单起见,我不在这个代码中。在测试中,我已经删除了这些代码,并且看到它不会影响卡片翻转到正面时会改变卡片尺寸的特殊行为。
有没有人看到过Sprite3D上的蒙版无法作为蒙版执行的情况?
有没有人见过面具不能在普通的Sprite对象上执行的情况?
Tween.animate()方法在使用Tween更改对象上的“rotationY”的值时可能会导致奇怪的行为?
任何和所有的答案将有所帮助。谢谢!