2017-02-20 36 views
12

我在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」的值時可能會導致奇怪的行爲?

任何和所有的答案將有所幫助。謝謝!

回答

5

固定!!!!!我找到了!

我發現問題不在前面。我已經爲卡本身應用了一個面具,這是Sprite3D對象。這個面具造成了問題。當我移除它時,BackFace(一個Sprite對象)擴展到與正面相同的大小,現在當我設置卡片尺寸時,兩個面都具有相同的尺寸。

我已將卡尺寸更新爲400x250以匹配原始的BackFace佈局,現在一切正常。

提示:儘可能在Sprite對象上設置遮罩,而不是Sprite3D對象。這可以保持2D對象上的2D操作。

相關問題