0

Coverflowクラスを作成し、すべてが正常に機能しますが、1つの問題が発生しました。アイテムをクリックするか、矢印キーを使用して画像をナビゲートすると、次のような画像形成が必要になります。

1)欲しいもの

カバーフローアイテムが欲しかった

オブジェクトが正しく配置されていない右側ですべてが正常に機能するようになりました。オブジェクトは互いに重なり合って配置されています。

2)何が問題なのですか

どうしたの

これで、右側が少しめちゃくちゃになっていることがわかります。画像はそのように重ならないようにする必要があります。左側と同じように、画像を並べて配置する必要があります。

3)画像を作成するコード

package be.devine.cp3.itemGroup
{

import com.greensock.TweenLite;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.MouseEvent;

public class Coverflow extends Sprite
{
    public var images:Array;
    private var _currentImageIndex:int;
    private var imageSize:uint;


    public function Coverflow(images:Array)
    {
        this.images = [];

        for each(var image:DisplayObject in images)
        {
            if(image.width > imageSize)
            {
                imageSize = image.width;
            }
            var imageContainer:Sprite = new Sprite();
            image.x = -1 * (image.width >> 1);
            image.y = -1 * (image.height >> 1);

            imageContainer.addChild(image);
            this.images.push(imageContainer);
        }
        this.currentImageIndex = images.length >> 1;


    }

    private function imageClickHandler(event:MouseEvent):void
    {
        var targ:DisplayObject = event.currentTarget as DisplayObject;
        currentImageIndex = getChildIndex(targ);
    }

    public function display():void
    {
        while(this.numChildren > 0)
        {
            removeChildAt(0);
        }

        var depth:Number = 0;

        for(var i:int = 0; i < images.length; i++)
        {
            var image:DisplayObject = images[i];
            var xPos:Number = 0;
            xPos = (i - _currentImageIndex) * imageSize;

            if(i < _currentImageIndex) { //moet er links van komen -> negatieve x
                image.rotationY = -90; //-45
                depth++;
            } else if(i == _currentImageIndex) {//in het midden            {
                image.rotationY = 0;
                depth = 0;

            } else {//moet rechts komen -> positieve x
                image.rotationY = 90; //45
                depth ++;

            }

            addChild(image);

            TweenLite.to(image,.5, {x:xPos});
            var zPos:int =  (i - _currentImageIndex);
            image.addEventListener(MouseEvent.CLICK, imageClickHandler);

        }

    }

    public function get currentImageIndex():int {
        return _currentImageIndex;
    }

    public function set currentImageIndex(value:int):void {

        value = Math.min(images.length -1, Math.max(0, value));

        if(_currentImageIndex != value)
        {
            _currentImageIndex = value;
            display();
        }
    }

}
}

私はすでにウェブで検索しましたが、カバーフローについて同様のことを見つけることができません...画像の子インデックスを設定することと関係があることは知っていますが、それを計算する方法がわかりません:)。誰かが私を助けてくれることを願っています。

4

1 に答える 1

0

私は解決策を見つけました:)子インデックスを変更する前に画像を追加し、addChildAtの代わりにsetChildIndexを使用する必要がありました:

   for(var i:int = 0; i < images.length; i++)
    {
        var image:DisplayObject = images[i];
        var xPos:Number = 0;
        var rY:int = 0;

        xPos = (i - _currentImageIndex) * imageSize;
        addChild(image);

        if(i < _currentImageIndex) { //moet er links van komen -> negatieve x
            rY = -90;
            setChildIndex(image,  numChildren-1);
        } else if(i == _currentImageIndex) {//in het midden            {
            rY = 0;
        } else {//moet rechts komen -> positieve x
            rY = 90;
            setChildIndex(image, 0);
        }
        TweenLite.to(image,.5, {x:xPos, rotationY: rY});
        image.addEventListener(MouseEvent.CLICK, imageClickHandler);

    }
于 2012-10-12T14:44:55.977 に答える