我在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」的值時可能會導致奇怪的行爲?
任何和所有的答案將有所幫助。謝謝!