0

私はFlexを初めて使用し、純粋なFlash/AS3カードゲームをFlex4.5に移植しようとしています。

それはほとんどうまく機能しますが、私はそこにいくつかのパズルの部分が欠けています:

カードのデッキ(スプライトまたはMovieClipsの配列)を表すUIComponentに基づいてカスタムコンポーネントを作成しました。

ここに画像の説明を入力してください

オリジナルの純粋なFlash/AS3ゲームでは、テーブルの3枚のカードにTweenを使用していました。これは、どのカードを置いたかを示すためです(テーブルの中央に向かってスライドさせます)。

import fl.transitions.*;
import fl.transitions.easing.*;

public class Deck extends UIComponent {
    private var _card:Array = new Array(3);
    private var _tween:Array = new Array(3);
            ....

    override protected function createChildren():void {
        _tween[YOU] = new Tween(_card[0], 'y', Regular.easeOut, _card[0].y + 40, _card[0].y, .5, true);
        _tween[LEFT] = new Tween(_card[1], 'x', Regular.easeOut, _card[1].x - 40, _card[1].x, .5, true);
        _tween[RIGHT] = new Tween(_card[2], 'x', Regular.easeOut, _card[2].x + 40, _card[2].x, .5, true);
             ....

しかし、Flash Builder4.5はfl.transitions。*パッケージをまったく知らないようです。

ここでTweenの使い方についてアドバイスをいただけますか?

私が書いたように、残り(私のカスタムFlexコンポーネント、カードの移動-スプライトなど)はうまく機能します。コメントする必要があるのはTween行だけです。

ありがとうございました!アレックス

4

2 に答える 2

0

Google CodeのTweenerクラスを見てください。それを使用して、オブジェクトを指定し、そのプロパティとその目的の値のマップを時間とともに指定できます。これらのプロパティを現在の値から目的の値に「トゥイーン」します。

Tweener.addTween(yourCard, {y:50, time:1});//for a 1 second tween 
于 2011-08-24T12:23:45.873 に答える
0

私の最初の反射的な反応は、flash.swc (Flash CS Pro によって提供される) を Flex ビルド パスに追加することでした。

import fl.transitions.*;
import fl.transitions.easing.*;

再度使用できます。

ここに画像の説明を入力

しかし、長期的には、トランプを動かしてEvent.ENTER_FRAMEで実行する独自の関数を作成することになるでしょう。カードをスライドさせるためだけに Tweener または Tweenlite ライブラリを含めたくないからです。

        _tween[0] = _card[0].y;
        _tween[1] = _card[1].x;
        _tween[2] = _card[2].x;
                ....
        _card[0].y = _tween[0] + 20;
        addEventListener(Event.ENTER_FRAME, slideCardYou);

        _card[1].x = _tween[1] - 20;
        addEventListener(Event.ENTER_FRAME, slideCardLeft);

        _card[2].x = _tween[2] + 20;
        addEventListener(Event.ENTER_FRAME, slideCardRight);
                ....

    private function slideCardYou(event:Event):void {
        if (_card[0].y-- < _tween[0]) 
            removeEventListener(Event.ENTER_FRAME, slideCardYou);
    }

    private function slideCardLeft(event:Event):void {
        if (_card[1].x++ > _tween[1]) 
            removeEventListener(Event.ENTER_FRAME, slideCardLeft);
    }

    private function slideCardRight(event:Event):void {
        if (_card[2].x-- < _tween[2]) 
            removeEventListener(Event.ENTER_FRAME, slideCardRight);
    }

また、mx.effects.Tween と spark.effects.Animate を見てきましたが、私の場合のようにスプライトではなく、UIComponents に適しているようです。

于 2011-08-25T12:07:47.080 に答える