0

だから私は中心点の周りに背景軌道を持つ方法を探していました。私は greensock blitmask に出くわしました。これは、ビットマップ データをラップして無限のスクロール効果を行うという驚くべき仕事をします。ただし、このブリットマスクを使用してビットマップ データを回転させ、ラッピング効果を維持する方法がわかりません。以下は私のSWFへのリンクです。

移動する画像は、ラップして無限スクロール効果を持たせたい画像です。問題は、画像が回転されてから画面外に移動した後の再配置に対処することです。

編集:私はこの問題を完全に忘れており、理解するのに時間がかかりすぎたため、ゲームのバックバーナーに置くことにしました. 最近、このコンセプトに戻ってきました。これを機能させるアイデアがあったからです。以下は、私が達成しようとしていたことを示す .SWF へのリンクです。この例はうまくいきますが、それが最善の解決策だとは思いません。

「WASD」コントロールムーブメント

周回する背景

三角法を使用して、星とプレーヤーの距離を計算しました。その星がその距離を超えている場合は、角度 * -1 を使用して位置を変更します。このコードはリンクの下にあります。

var travelVal:Number = 0;
var turnVal:Number = 0;
var currentChild:DisplayObject;
var currentStar:Star;
var childIndex:int = 0;
var angle:Number = 0;
var distance:Number = 0;

if (controller.isKeyDown(Keyboard.A))
        {
            turnVal += TURN_SPEED;
        }

        if (controller.isKeyDown(Keyboard.D))
        {
            turnVal -= TURN_SPEED;
        }

        if (controller.isKeyDown(Keyboard.W))
        {
            travelVal += PLAYER_SPEED;
        }

        if (controller.isKeyDown(Keyboard.S))
        {
            travelVal -= PLAYER_SPEED
        }

        for (childIndex = 0; childIndex < numChildren; childIndex++)
        {
            currentChild = getChildAt(childIndex);

            //if (currentChild != player && currentChild != debugOutput && currentChild != blackBkgd)
            if(currentChild is Star)
            {
                currentStar = currentChild as Star;

                //move this child based on the travel value
                currentChild.y += travelVal * currentStar.speed;

                //calculate the orbiting
                distance = Math2.distanceBetweenObjects(player, currentChild);
                angle = Math.atan2(currentChild.y - player.y, currentChild.x - player.x);

                if (distance > STAGE_WIDTH ) angle = angle * -1; 
                //get orginal angle in radians
                //angle = Math.atan2(currentChild.y - player.y , currentChild.x - player.x);
                angle = Math2.radiansToDegress(angle);
                angle += turnVal;
                //currentStar.rotation = angle;

                angle = Math2.degreesToRadians(angle);

                currentChild.x = player.x + (distance * Math.cos(angle));
                currentChild.y = player.y + (distance * Math.sin(angle));
            }
        }
4

1 に答える 1

1

特定の中心点を中心に回転するには、まず (-centerpoint.x,-centerpoint.y) だけ移動し、次に (0,0) を中心に回転してから (centerpoint.x,centerpoint.y) を元に移動します。

于 2012-09-20T05:23:06.213 に答える