Ich bin neu in Action-Skript. Ich habe versucht, einen endlosen Scroll-Hintergrund zu schaffen, der natürlich vertikal von oben nach unten verläuft. Ich versuchte es mit dem Erstellen eines Movieclips, indem ich das Bild in einen Movieclip legte und etwas Code anwendete, es funktionierte wie ein Zauber, aber ich bemerkte einige Lecks. Daher habe ich eine andere Methode ausprobiert, die ich im Stack-Committee gefunden habe, und die vorgeschlagen hat, die newBitmapData-Methode zu verwenden. Die Frage, die ich fand, bestand darin, dass ein Hintergrund sich von links nach rechts bewegt, ich habe es versucht, es war perfekt.
Ich habe versucht, alle Variablen und Faktoren darin zu verstehen, um es zu ändern und es von oben nach unten zu scrollen, aber ich stehe jedes Mal mit einem seltsamen Verhalten aus der Flash-Datei. Ich bin mir sicher, dass ich etwas falsch mache. Ich würde wirklich die Hilfe schätzen .. ich bin begierig zu lernen.
THis ist Stack Quelle Ausschuss Link i aus, die Antwort bekam:
The link and the answerEndless Repeating scrolling Hintergrund as3 Adobe Air
Hier ist der gleiche Code, den ich zu implementieren bin versucht, über den Link kopiert:
package {
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.geom.Point;
public class EndlessBG extends MovieClip{
//this one stays stationary, we're getting the pixels for the right side of the pic from here
private var _source:BitmapData;
//this is the one moving to the left (the pixels for the right side are not visible except for once a cycle);
private var _movingPixels:BitmapData;
private var _canvas:Bitmap;
private var _xOffset:int = 0;
private var _rect:Rectangle = new Rectangle();;
private var _point:Point = new Point();
public function EndlessBG() {
super();
_source = new BathroomStillLife();
_canvas = new Bitmap(new BitmapData(_source.width, _source.height));
_canvas.bitmapData.draw(_source);
_canvas.x = stage.stageWidth/2 - _canvas.width/2;
_canvas.y = 5;
addChild(_canvas);
addEventListener(Event.ENTER_FRAME, gameLoop);
setGeometryDefaults();
_movingPixels = new BitmapData(_source.width, _source.height);
_movingPixels.copyPixels(_source, _rect, _point);
//turn this on to watch red pixels be drawn where the source pixels are coming in
//_source = new BitmapData(_source.width, _source.height, false, 0xFF0000);
}
private function gameLoop(e:Event):void {
_xOffset--;//where the background is moving to
if (_xOffset < -_source.width) {
_xOffset = 0;
//this doesn't seem to work correctly:
//_movingPixels.scroll(_source.width, 0);
_movingPixels = new BitmapData(_source.width, _source.height);
_movingPixels.copyPixels(_source, _rect, _point);
}
trace(_xOffset);
setGeometryDefaults();
_movingPixels.scroll(-1, 0);
//draw the moved part of the canvas
_canvas.bitmapData.copyPixels(_movingPixels, _rect, _point);
//If we stop here, we get a smear to the right
//so, get the remaining pixels directly from the source
//1) reset our rect and point to be to the right side
_rect.x = 0;
_rect.width = -_xOffset;
_point.x = _source.width + _xOffset;
//2) copy from the source
_canvas.bitmapData.copyPixels(_source, _rect, _point);
}
private function setGeometryDefaults():void {
_rect.x=0;
_rect.y=0;
_rect.width = _source.width;
_rect.height = _source.height;
_point.x = 0;
_point.y = 0;
}
}
}
ich wirklich zu schätzen die Hilfe ... eifrig zu lernen.
Vorschlag: Anstatt komplizierte Bitmap-Operationen durchzuführen, sollten Sie 2 Bilder übereinander auf Ihrer Bühne haben. Scrolle sie mit der gleichen Geschwindigkeit. Sobald ein Bild unter dem Bildschirm ist, bewegen Sie es sozusagen über den Bildschirm. – DodgerThud
danke für deine antwort .. ich würde es lieber durch code tun, es wäre eine win win situation, ich würde lernen und es besser halten :) –
Fairer Punkt, ich werde es selbst versuchen und eine Antwort posten, wenn es mir gelingt . – DodgerThud