2011-02-08 21 views
0

私が取り組んでいるプロジェクトでは、ゆっくりと上にスクロールする大規模な背景イメージ(幅800ピクセルx高さ2585ピクセル)があります。Flash CS5/ActionScript 3の遅延読み込み無限スクロールバックグラウンド

、私がコードを使用していた前に:http://www.ilike2flash.com/2010/08/endless-scrolling-background-in-as3.html

Iは、上方にスクロールするためのコードを変更し、時折残像及びループ前画素トール空白行を表示する奇妙な断続バグを有することに加えて次に、動的ロードをうまく処理できないように見える(いくつかの異なるプリローダースクリプトを試してみたが、それらはすべて破損している)、初期実装では問題にならなかったかもしれないが、巨大な画像を使用しています。

したがって、私の質問:

a。レイジーローディングバックグラウンドオブジェクトをサポートしているFlashベースの無限のスクロールコードが浮かんでいますか?(既存の背景は6で切り刻まれています)

b。もしそうでなければ、どのように私は上記のリンクを変更することができますか?

ありがとうございます!次のように私のAS3は次のとおりです。 リンクは、コードの約15行を持っているændrew

stop(); 

//The speed of the scroll movement. 
var scrollSpeed:uint = 2; 

//This adds two instances of the movie clip onto the stage. 
var s1:ScrollBg = new ScrollBg(); 
var s2:ScrollBg = new ScrollBg(); 
addChild(s1); 
addChild(s2); 
setChildIndex(s1, 0); 
setChildIndex(s2, 0); 

//This positions the second movieclip next to the first one. 
s1.y = 0; 
s2.y = s1.height; 

//Adds an event listener to the stage. 
stage.addEventListener(Event.ENTER_FRAME, moveScroll); 

//This function moves both the images to top. If the first and second 
//images goes past the top stage boundary then it gets moved to 
//the other side of the stage. 
function moveScroll(e:Event):void{ 
    s1.y -= scrollSpeed; 
    s2.y -= scrollSpeed; 

    if(s1.y <= -s1.height){ 
    s1.y = s1.height - scrollSpeed; 
    }else if(s2.y <= -s2.height){ 
    s2.y = s2.height - scrollSpeed; 
    } 
} 

答えて

1

ハウディ。 オブジェクトの2つのインスタンスを作成し、1フレームごとに1ピクセルずつ移動し、最初のクリップがビューから外れているかどうかを確認します。その時点で、ムービークリップをもう一方のクリップの端に移動します。そこにエラーの余地がありません...しかし、私はそれを指摘していた場合、私はそれが正しいここ

if(s1.x < -s1.width){ 
    s1.x = s1.width; 
}else if(s2.x < -s2.width){ 
    s2.x = s2.width; 
} 

かなと思うと、次のようになります(代わりに<<=に気づく)

if(s1.x <= -s1.width){ 
    s1.x = s1.width; 
}else if(s2.x <= -s2.width){ 
    s2.x = s2.width; 
} 

これはムービークリップ限り大きな資産になるのロードを扱うよう

の間に数ピクセルのギャップを削除し、それがロードされた後だけでスクロール機能を追加します。あなたはhttp://drawlogic.com/2007/09/20/howto-using-loaders-in-as3/でサンプルを探すことができますが、他のものがたくさんあります。

+0

こんにちは!あなたが提案した編集はバグを修正しなかった - それは2回の繰り返しの後にまだ1行または2つのスペースを追加する。彼はデモページで同じ問題を出すようには思われません - 私は完全なコードで私の質問を更新しました。 – aendrew

+1

また、これらの条件文の両方でscrollSpeedの値を減算しました.1回の反復後にバグが発生したようです。私はスペースを正確にscrollSpeed量と推測しています。 – aendrew

0

デモでこのように動作させるには、画像の幅と高さを丸くする必要があると推測されますが、フラッシュは.5pxギャップのレンダリングが好きな傾向があります。物事を正しく突き、それはよりよいレンダリングすることを願っていることを確認するために、他:それは背景の遅延ロードに来るとき、あなたは

if(s1.x < -s1.width){ 
    s1.x = s2.x + s2.width; 
}else if(s2.x < -s2.width){ 
    s2.x = s1.x + s1.width; 
} 

それに注意する必要があると次のセクションのイメージをすることを確認しますスクロールを開始する前に読み込みが終了しているので、イメージソースをvarのどこかに格納しておくことを忘れないでください(静的な「遅延読み込み」クラスを使用している可能性があります)。

+0

こんにちは!うん、私はイメージをループしている(実際にはむしろ偶然 - アーティストは素晴らしいです、私はかなり驚きました)。そのコードを少し試してみましょう。それが良いかどうかを見てみましょう(scrollSpeedを引くことは助けになったようです)。簡単な質問 - 現在、scrollBgはムービークリップオブジェクトです。私は他のすべての後にどのようにその負荷を作りますか? – aendrew

1

限り私のためにギャップを処分したこの修正プログラム「イメージの後、次のループを前の画素、背の高い空白行」として...

if (s1.x <= - s1.width) { s1.x = s2.x + s2.width; } 
else if (s2.x <= -s2.width) { s2.x = s1.x + s1.width; } 

お知らせその背景のx位置1は、背景2のx位置とその幅に配置され、逆も同様である。

0

Greensock's Blitmaskを参照してください。これを使用すると、繰り返し可能なイメージが1つだけ必要となり、blitmaskは高度に最適化されています。

関連する問題