[AS3] Langsame Events
Verfasst: 15.11.2011, 17:50
Hi ich lerne gerade ein wenig AS3 um ein kleines Flashspiel zu schreiben. Prinzipiell kein Ding, wenn Flash CS5 nicht pausenlos rumstocken und abspacken würde. Aber das ist nicht mein Problem.
Ich möchte eine Grafik neben dem Cursor anzeigen (Drag). Das habe ich gemacht indem ich die Grafik (bzw. eigentlich ist es ein MovieClip mit mehreren Frames) zur Bühne / zum Dokument /zum MovieClip hinzufüge und dann:
1. startDrag benutze
2. einen EventListener für MouseEvent.MOUSE_MOVE hinzufüge und in diesem die Koordinaten der Grafik anpasse und den Screen neu zeichne
Prinzipiell geht das auch nur ist es extrem lahm. Die Grafik ruckelt gemächlich hinterm Mauszeiger hinterher, verblüffender Weise dauert es auch ein Weilchen bis CLICK-Events mal was machen.
Was aber noch merkwürdiger ist, ist die Tatsache, dass sobald ich ziemlich weit rechts mit der Maus bin beides so flüssig ist wie ich mir das vorstelle. Also im (sagen wir mal) rechten Achtel der Bühne läuft alles wie geschmiert. Weiter links ruckelt es.
Hier mal der Code (teilweise sind da noch Sachen zum Testen drin):
Ich denke mal ich mache was falsch. Ich würde nur gern wissen was. :)
Ich möchte eine Grafik neben dem Cursor anzeigen (Drag). Das habe ich gemacht indem ich die Grafik (bzw. eigentlich ist es ein MovieClip mit mehreren Frames) zur Bühne / zum Dokument /zum MovieClip hinzufüge und dann:
1. startDrag benutze
2. einen EventListener für MouseEvent.MOUSE_MOVE hinzufüge und in diesem die Koordinaten der Grafik anpasse und den Screen neu zeichne
Prinzipiell geht das auch nur ist es extrem lahm. Die Grafik ruckelt gemächlich hinterm Mauszeiger hinterher, verblüffender Weise dauert es auch ein Weilchen bis CLICK-Events mal was machen.
Was aber noch merkwürdiger ist, ist die Tatsache, dass sobald ich ziemlich weit rechts mit der Maus bin beides so flüssig ist wie ich mir das vorstelle. Also im (sagen wir mal) rechten Achtel der Bühne läuft alles wie geschmiert. Weiter links ruckelt es.
Hier mal der Code (teilweise sind da noch Sachen zum Testen drin):
Code: Alles auswählen
package
{
import flash.display.*;
import flash.events.MouseEvent;
public class MainScreen extends MovieClip
{
private static const MapWidth:uint = 10;
private static const MapHeight:uint = 10;
private static const TileWidth:uint = 64;
private static const TileHeight:uint = 64;
private static const OffsetX:uint = 16;
private static const OffsetY:uint = 16;
private var CursorImage:Images = new Images();
public function MainScreen()
{
for (var y:uint=0; y<MapHeight; ++y)
{
for (var x:uint=0; x<MapWidth; ++x)
{
var index:int = x + y * MapWidth;
var tile:Tile = new Tile();
var image:Images = new Images();
tile.x = OffsetX + x * TileWidth;
tile.y = OffsetY + y * TileHeight;
tile.index = index;
image.x = 0;
image.y = 0;
image.gotoAndStop(1);
image.index = index;
image.name = "image";
addChild(tile);
tile.addChild(image);
tile.addEventListener(MouseEvent.CLICK, clickHandler);
}
}
CursorImage.gotoAndStop(1);
addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
addChild(CursorImage);
setDraggedObject(3);
}
public function clickHandler(event:MouseEvent):void
{
if (event.currentTarget != null && event.currentTarget != this)
{
if (CursorImage.currentFrame > 1)
{
var image:Images = event.currentTarget.getChildByName("image");
image.gotoAndStop(CursorImage.currentFrame);
}
}
}
private function setDraggedObject(index:uint)
{
CursorImage.gotoAndStop(index);
// hier stand mal das dragStart
}
private function moveHandler(event:MouseEvent):void
{
CursorImage.x = mouseX;
CursorImage.y = mouseY;
event.updateAfterEvent();
}
}
}