Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-05-2011, 17:31   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
as3 BitmapData Pixelverschiebung und wieder auffüllen

hallo zusammen...

ich hab ein kleines problem und wollte fragen, ob mir da jemand helfen kann.

zur besseren erklärung ist ein bild dabei.

ich habe eine bühne 1280*720 und darüber soll ein endlos bitmap laufen. normal könnte man das ja mit drei bitmapdatas machen, die, wenn sie links nicht mehr zu sehen sind, sich einfach rechts wieder anhängen und so weiter,..aber es sollte nur ein bitmapData sein, somit würde ich es gern so machen,...

das bitmap ist link und rechts etwas grösser als die bühne.

bei jedem frame solln sich die pixel um 1 pixel nach links schieben (würde dann so aussehen als hätte man das bitmap mit der x position um eins nach links geschoben)

die ganz linke reihe an pixel soll dann aber verschwinden (die, die von x=0 auf x=-1) geschoben wurden und rechts soll sich eine neue reihe mit transparenten pixeln bilden.

sowas ist bestimmt möglich und ich wär euch total dankbar, wenn mir da einer helfen könnte,...

hier zur erklärung ein bild

mediarocker ist offline   Mit Zitat antworten
Alt 18-05-2011, 17:33   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Schau Dir mal die Funktion BitmapData.scroll(x, y) an.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 18-05-2011, 17:37   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
hallo martin,..

vielen dank,..werd ich mir gleich mal durchlesen, ob das in meinen fall helfen kann.
mediarocker ist offline   Mit Zitat antworten
Alt 18-05-2011, 18:02   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
es geht schonmal in die richtige richtung und wär mit

bitmapData.scroll(-1,0) auch absolut zu gebrauchen,..jedoch ist das zu langsam,..und wenn ich (-10,0) verwende, dann wär es die richtige geschwindigkeit, jedoch zerhackt es mir dann das bild,..

auf das bitmap data wird mit der maus dynamisch draufgemalt.


wenn ich das bitmapData einfach bei jeden frame mit x-=10; verschiebe, dann würde das wunderbar passen,..eigentlich genau das nur, dass das bitmapData nicht ausgehen darf,..puh...

Geändert von mediarocker (18-05-2011 um 18:04 Uhr)
mediarocker ist offline   Mit Zitat antworten
Alt 18-05-2011, 18:08   #5 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
framerate erhöhen
oder
zehn mal um 1 scrollen, zwischendurch Mausinteraktion durchführen
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 20-05-2011, 13:52   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
10 mal scroll durchführen wäre die lösung, also immerwieder um nur einen pixel..aber wie scripte ich die mausinteraktion dazwischen? er müsste quasi in einer funktion 10 mal um -1 schieben und dazwischen aber jedesmal die änderung des bitmaps durch die maus checken

danke

Geändert von mediarocker (20-05-2011 um 13:57 Uhr)
mediarocker ist offline   Mit Zitat antworten
Alt 20-05-2011, 14:00   #7 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von mediarocker Beitrag anzeigen
10 mal scroll durchführen wäre die lösung, also immerwieder um nur einen pixel..aber wie scripte ich die mausinteraktion dazwischen?
danke
Wie fragst du denn die Maus bisher ab?
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 20-05-2011, 14:15   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
also es gibt ne klasse, diese extended die Bitmap, in in der wird mit draw je nach x und y der maus auf ein bitmap gezeichnet. das Bitmap ist 1280 breit.

dann verwende ich zwei instanzen der klasse in einer anderen, um sie immer nacheinander durch die bühne fahren zu lassen...wenn das eine ganz draussen ist, löscht es ihren inhalt und hängt sich wieder am ende des zweiten an unsw,...das würde auch super funktionieren, jedoch an den kanten an dem die zwei Bitmaps zusammengefügt sind, entsteht mir beim zeichnen immer ein bruch, da der strich den ich programmiert habe von so vielen parametern mausgeschwindigkeit, xpos, ypos, etc abhängig ist,..also am besten wäre es, wenn der strich nicht von einem bitmap ins andere wandern müsste...

ich hab gerade versucht -1 zu scrollen, dann die draw methode auf zu rufen und wieder zu scrollen usw,..das zerhackt den strich aber auch,.
mediarocker ist offline   Mit Zitat antworten
Alt 20-05-2011, 14:17   #9 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Das 10mal wiederholen würde ich allein aus Performancegründen sein lassen.

Das Zerkackte kommt doch eigentlich nur daher, dass der Randbereich immer wieder dupliziert wird?! Und das kann man verhindern indem man das verschobene Stück einfach wieder mit der Hintergrundfarbe füllt:
PHP-Code:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
    
const 
BMP_COLOR:uint 0xFFFFFFFF;
const 
LINE_COLOR:uint 0xFF000000;
var 
bmpSpeed:int = -10;

var 
bmpData:BitmapData = new BitmapData(1280720trueBMP_COLOR);
var 
bmp:Bitmap = new Bitmap(bmpData);

addChildbmp );
addEventListener(Event.ENTER_FRAMEmoveBmp);

function 
moveBmp(event:Event):void {
    
bmpData.setPixel32(mouseXmouseYLINE_COLOR);
    
    
bmpData.scroll(bmpSpeed0);
    
bmpData.fillRect(
        new 
Rectangle(
            (
bmpSpeed 0)?
                
bmpData.width bmpSpeed :
                
0,
            
0,
            
Math.abs(bmpSpeed),
            
bmpData.height
        
), 
        
BMP_COLOR
    
);

__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 20-05-2011, 14:39   #10 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Das Zerkackte kommt doch eigentlich nur daher, dass der Randbereich immer wieder dupliziert wird?!
Ach darum geht es?
Ich hatte "zerhackt" so interpretiert, das damit die Zeichendichte gemeint ist.
(Vergleich im Anhang)

Jetzt gibt es auch plötzlich wieder 2 bitmaps
Ich bin etwas verwirrt, was nun eigentlich wie passieren soll.
Angehängte Dateien
Dateityp: swf einMalZehn.swf (1,5 KB, 9x aufgerufen)
Dateityp: swf zehMalEins.swf (1,5 KB, 12x aufgerufen)
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 20-05-2011, 14:55   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
vielen vielen dank für das script,..das ist es leider nur fast,...

setPixel benützt du ja hier um eine line zu zeichnen,..aber die line wird ja schon gezeichnet,..besser gesagt,..das passiert schon alles,..mit jeden frame aktualisiert sich das BitmapData also, wenn der user die line weiterzeichnet...

kurz gesagt,..ich hab ein bitmap, dass nie gleich ist, weil auf diesen transparenten ding draufgezeichnet wird...
mediarocker ist offline   Mit Zitat antworten
Alt 20-05-2011, 15:03   #12 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
hier mal das was ich mit zerhackt meine,. speed ist nach deinem script jetzt 10,...die pixel32 sind auskommentiert.

http://www.mediarocker.de/demo/
mediarocker ist offline   Mit Zitat antworten
Alt 20-05-2011, 15:06   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 67
mit deinem zehnMalEins.swf wären wir glaub ich verdammt nah dran,. könntest du von dem swf mal den code posten,..das würde mir super helfen

Geändert von mediarocker (20-05-2011 um 15:11 Uhr)
mediarocker ist offline   Mit Zitat antworten
Alt 20-05-2011, 15:38   #14 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von mediarocker Beitrag anzeigen
hier mal das was ich mit zerhackt meine,.
Das sieht doch schon ganz schick aus

Das Zerhackte entsteht IMHO nicht direkt durch die Verschiebung des BitmapDatas, sondern dadurch, dass Du diese nicht beim Zeichen Deiner Linie(n) einberechnest.

Du wirst ja irgendwie den/die letzten Vektorpunkt(e) zwischenspeichern, um daraus die Linie zu rekonstruieren. Wenn Du nun das BitmapData mit den vorherigen Liniensegmenten drauf verschiebst, musst Du natürlich auch diese Punkte um denselben Betrag verschieben, da ja sonst die Anschlüsse nicht mehr stimmen.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 20-05-2011, 17:38   #15 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von mediarocker Beitrag anzeigen
mit deinem zehnMalEins.swf wären wir glaub ich verdammt nah dran,. könntest du von dem swf mal den code posten,..das würde mir super helfen
nu klar:
PHP-Code:
package 
{
    
import flash.display.Bitmap;
    
import flash.display.BitmapData;
    
import flash.display.Sprite;
    
import flash.events.Event;
    
import flash.events.MouseEvent;
    
import flash.geom.Rectangle;
    
    
/**
     * ...windig heute
     * 
     * @author milchreis
     */
    
public class Main extends Sprite 
    
{
        private var 
b:BitmapData;
        private var 
brush:Sprite;
        private var 
isDrawing:Boolean;
        
        public function 
Main():void 
        
{
            if (
stageinit();
            else 
addEventListener(Event.ADDED_TO_STAGEinit);
        }
        
        private function 
init(e:Event null):void 
        
{
            
removeEventListener(Event.ADDED_TO_STAGEinit);
            
// entry point
            
            
= new BitmapData(stage.stageWidthstage.stageHeightfalse0);
            
addChild(new Bitmap(b));
            
            
brush = new Sprite();
            
brush.graphics.beginFill(Math.random() * 0xffffff);
            
brush.graphics.drawCircle(0010);
            
brush.graphics.endFill();
            
            
brush.startDrag(true);
            
addChild(brush);
            
            
isDrawing false;
            
            
stage.addEventListener(MouseEvent.MOUSE_DOWNtoggleDraw);
            
stage.addEventListener(MouseEvent.MOUSE_UPtoggleDraw);
            
            
addEventListener(Event.ENTER_FRAMEloop);
        }
        
        private function 
loop(e:Event):void 
        
{
            for (var 
i:int 010i++)
            {
                if (
isDrawingpaint();
                
scroll();
            }
        }
        
        private function 
toggleDraw(e:MouseEvent):void 
        
{
            
isDrawing = !isDrawing;
        }
        
        private function 
scroll():void
        
{
            
            
b.scroll(-10);
            
b.fillRect(new Rectangle(b.width 101b.height),0);
        }
        
        private function 
paint():void
        
{
            
b.draw(brushbrush.transform.matrix);
        }
        
    }
    

Es ist aber eben auch nicht zusammenhängend, da es nur die Punkte zeichnet.

Zitat:
Zitat von mediarocker Beitrag anzeigen
hier mal das was ich mit zerhackt meine,. speed ist nach deinem script jetzt 10,...die pixel32 sind auskommentiert.

http://www.mediarocker.de/demo/
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Das sieht doch schon ganz schick aus

Das Zerhackte entsteht IMHO nicht direkt durch die Verschiebung des BitmapDatas, sondern dadurch, dass Du diese nicht beim Zeichen Deiner Linie(n) einberechnest.
Finde den Effekt ehrlich gesagt recht schnucklig.
Wenn mich jemand vor diesem thread gefragt hätte wie man einen solchen Effekt erzeugt (also mit diesen Unterbrechungen) hätte ich vermutlich sonst was kompliziertes programmiert.

Ich denke der Martin hat recht mit der fehlenden Verschiebung des ersten Punktes.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
as3, bitmapdata, copypixels, pixel

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Array] Lücken auffüllen Deconteroga ActionScript 3 5 04-08-2010 10:59
Zeilen mit Punkten auffüllen Digger2k3 PHP und MySQL 5 27-07-2005 22:06
pixelverschiebung viertel Flash MX 2004 10 09-06-2005 17:19
mhh [css] auffüllen bis zum rand boreker HTML und CSS 7 27-02-2005 22:53
Ergebnisse mit Nullen auffüllen? thebeast Flash MX 2004 2 10-12-2004 15:48


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele