Часто возникает необходимость при верстке сложного интерфейса подгонять некоторые часть графики относительно друг друга, но иногда приходится это делать по-пиксельно, что приводит к большому количеству компиляций, а следовательно к большой трате времени.
Но и это еще не все, сделаем возможность передавать в наш класс графического объекта который можно будет двигать с помощью клавиш, что приведет к уменьшению времени подгонки графики.
FPSCounter.as:
//file: FPSCounter.as
//language: actionscript 3.0
//author: mixailflash
//site: mixailflash.livejournal.com
package
//language: actionscript 3.0
//author: mixailflash
//site: mixailflash.livejournal.com
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.DisplayObjectContainer;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.getTimer;
import flash.system.System;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
import flash.ui.*;
public class FPSCounter extends Sprite
{
private var last:uint = getTimer();
private var ticks:uint = 0;
private var tf:TextField;
private var spr:Sprite;
public static var DRAG:DisplayObjectContainer; //таскаемый объект;
public function FPSCounter(stage:Stage)
{
tf = new TextField();
spr = new Sprite();
tf.textColor = 0x000000;
tf.text = "----- fps --------- memory";
tf.selectable = false;
tf.autoSize = 'left';
tf.textColor = 0xeeeeee;
tf.background = true;
tf.backgroundColor = 0x333333;
//ставим прослушиватель на нажатия кнопок клавиатуры
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
}
private function keyPressedDown(event:KeyboardEvent):void
{
var key:uint = event.keyCode;
if (key == 112) // проверяем нажата ли кнопка F1
{
// если еще не нажимали и текст не находится в области видимости
if (!tf.parent)
{
stage.addEventListener(Event.ENTER_FRAME, tick);
stage.addChild(tf);
}
else
{
stage.removeEventListener(Event.ENTER_FRAME, tick);
stage.removeChild(tf);
}
}
if (key == 113) // проверяем нажата ли кнопка F2
{
if (!spr.parent)
{
stage.addChild(spr);
stage.addChild(tf);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moving);
}
else
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, moving);
stage.removeChild(spr);
stage.removeChild(tf);
}
}
// комманды для того чтобы двигать переданный графический объект
if (key == 39) // налево
DRAG.x++;
if (key == 37) // направо
DRAG.x--;
if (key == 40) // вниз
DRAG.y++;
if (key == 38) // вверх
DRAG.y--;
}
private function moving(event:MouseEvent):void
{
spr.graphics.clear();
var str:String = '';
// показываем координаты мыши
str = str.concat('x: '+ event.stageX + ' y: ' + event.stageY);
if (DRAG)
str = str.concat('x: '+ event.stageX + ' y: ' + event.stageY);
if (DRAG)
{
str = str.concat('\nDRAG x: '+ DRAG.x +' y: '+ DRAG.y); // координаты объекта
}
tf.text = str;
spr.graphics.lineStyle(1, 0xff0000, 1);
spr.graphics.moveTo(stage.stageWidth, event.stageY);
spr.graphics.lineTo(0, event.stageY);
spr.graphics.moveTo(event.stageX, stage.stageHeight);
spr.graphics.lineTo(event.stageX, 0);
}
public function tick(evt:Event):void
{
//считаем fps и memory
ticks++;
var now:uint = getTimer();
var delta:uint = now - last;
if (delta >= 1000)
{
var fps:Number = ticks / delta * 1000;
tf.text = fps.toFixed(1) + " fps " + int(System.totalMemory/1024) + 'kb'+ " memory";
ticks = 0;
last = now;
}
}
}
}
Main.as:
//file: Main.as
//language: actionscript 3.0
//author: mixailflash
//site: mixailflash.livejournal.com
package
//language: actionscript 3.0
//author: mixailflash
//site: mixailflash.livejournal.com
package
{
import flash.display.Sprite;
import flash.display.Stage;
import FPSCounter;
public class Main extends Sprite
{
public function Main()
{
var fps:FPSCounter = new FPSCounter(stage);
addChild(fps);
//рисуем простой прямоугольник
var spr:Sprite = new Sprite();
spr.graphics.beginFill(0xff00ff, 1);
spr.graphics.drawRect(0,0,100,100);
addChild(spr);
FPSCounter.DRAG = spr; // передаем прямоугольник что бы его можно было двигать
}
}
}
Теперь мы можем перемещать объекты и смотреть их новые координаты, а так же смотреть координаты других элементов.
Блин! Я давеча подгонял один элемент, он должен был совпадать со вторым до пикселя. И даже как-то не подумал, что можно было сделать, чтобы его при запущенном ролике клавишами погонять.
ОтветитьУдалитьвот и я раньше тоже не мог подумать о таком, а потом решил почему не сделать, вообще я сейчас хочу сделать серию статей об инструментах для тестирования и отладки на живую, все клавиши от F1 до F10, чтобы время не тратить
ОтветитьУдалитьUser referenced to your post from Подгоняем элементы на живую saying: [...] Оригинал взят у в Подгоняем элементы на живую [...]
ОтветитьУдалить