|
|
|||||
Регистрация: Oct 2009
Сообщений: 45
|
Вращение текстового поля
Всем привет. Только что начал разбираться с AS3 , и возникла такая проблема; создаю текстовое поле, внедряю шрифты и мне надо его плавно повернуть по оси Y на 20, а потом плавно вернуть в исходное состояние. Как это можно реализовать? Спасибо.
var dat:Date = new Date(); var tf:TextFormat = new TextFormat(); tf.font = new A_La_Russ().fontName; // указываем шрифт, который хотим использовать в текстовом поле tf.size = 20; // указываем размер текста var txtField:TextField = new TextField(); txtField.defaultTextFormat = tf; // указываем форматирование, которое будет использоваться для данного текстового поля txtField.width = 500; // ширина текстового поля txtField.height = 350; // высота текстового поля txtField.x = 125; // положение текстового поля по оси х txtField.y = 25; // положение текстового поля по оси у txtField.embedFonts = true; // указываем, что текст должен отображаться с помощью встроенного шрифта txtField.antiAliasType = AntiAliasType.ADVANCED; txtField.multiline = true; // текстовое поле должно быть многострочным txtField.wordWrap = true; // разрешаем перенос по словам txtField.text = dat.getHours() + " : " + dat.getMinutes() + " : " +dat.getSeconds(); addChild(txtField); // добавляем текстовое поле в список отображения addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame (event:Event) { txtField.rotationY = +20; } |
|
|||||
Регистрация: Nov 2010
Сообщений: 430
|
Как вариант, немного изменить ваш код:
// можно добавить пару переменных var delta:int = 1; // переменная «дельта перемещения» var maxAngle:int = 20; // максимальный угол поворота // и чуток изменить вашу функцию function onEnterFrame(event:Event):void { s.rotationY += delta; // прибавляем дельту перемещения if (s.rotationY >= maxAngle) // если поворот больше или равен нужному углу { delta = -delta; // инвертируем дельту перемещения (прибавлялось «1», стало «-1») } else if (s.rotationY <= 0) // если поворот меньше или равен { s.rotationY = 0; // ставим угол в нуль removeEventListener(Event.ENTER_FRAME, enterFrameHandler); // удаляем слушатель, чтоб не было боьше передвижения } }
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь. |
|
|||||
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
Или можно использовать библиотеку FPTween:
testRotation.swf package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import fl.transitions.easing.Strong; import ru.flashpress.tween.anim.FPTween; import ru.flashpress.tween.events.FPTweenEvent; public class testRotation extends Sprite { private var tween:FPTween; public function testRotation() { this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP_LEFT; // var textField:TextField = new TextField(); textField.autoSize = TextFieldAutoSize.LEFT; textField.defaultTextFormat = new TextFormat('Tahoma', 40); textField.text = 'FPTween lib'; this.addChild(textField); textField.x = 100; textField.y = 100; // tween = new FPTween(textField, 'rotationY', Strong.easeOut, 1); tween.addEventListener(FPTweenEvent.FINISH, finishHandler); // this.stage.addEventListener(MouseEvent.CLICK, clickHandler); } private var rot:Number = 0; private function clickHandler(event:MouseEvent):void { tween.start(20, '+20'); } private function finishHandler(event:FPTweenEvent):void { switch (event.state.animationId) { case '+20': tween.start(0, '-20'); break; case '-20': trace('complete'); break; } } } }
__________________
FlashPress.ru | Blog |
|
|||||
Регистрация: Oct 2009
Сообщений: 45
|
Первый вариант не трансформируе и не отображает текст вообще. На второй вариант выбивает ошибка: "Монтажный кадр 1, слой "Слой 2", кадр 1, строка 5 1037: Пакеты не могут быть вложенными."
maincode, не могли бы Вы сбросить fla исходник и подтолкнуть в какю сторону двигаться, чтобы трансформация была не по клику, а выполнялась все время циклично? еще вопрос: во вложенног файле должно поварачиваться время, оно не поворачивается и секунды накладываются друг на друга. Как мне это мсправить? Спасибо. |
|
|||||
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
по коду не понятно то вы вообще пытаетесь сделать какой результат необходимо получить?
__________________
FlashPress.ru | Blog |
|
|||||
Регистрация: Oct 2009
Сообщений: 45
|
мне надо, чтобы часы искажались туда-обратно, как у Вас в примере, только не по клику, а чтобы все время искажение было (циклично)
|
|
|||||
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
import flash.utils.Timer; import flash.events.TimerEvent; import ru.flashpress.tween.anim.FPTween; import ru.flashpress.tween.events.FPTweenEvent; import fl.transitions.easing.Strong; import fl.transitions.easing.Regular; var txtField:TextField = new TextField(); var tf:TextFormat = new TextFormat(); tf.font = new A_La_Russ().fontName; tf.size = 40; txtField.defaultTextFormat = tf; txtField.width = 500; txtField.height = 350; txtField.x = 125; txtField.y = 25; txtField.embedFonts = true; txtField.antiAliasType = AntiAliasType.ADVANCED; txtField.multiline = true; txtField.wordWrap = true; addChild(txtField); var timer:Timer = new Timer(1000); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); function timerHandler(event:TimerEvent):void { tween.start(20, '+20'); } var tween:FPTween = new FPTween(txtField, 'rotationY', Strong.easeIn, 0.4); tween.addEventListener(FPTweenEvent.FINISH, finishHandler); function finishHandler(event:FPTweenEvent):void { switch (event.state.animationId) { case '+20' : var dat:Date = new Date(); txtField.text = dat.getHours() + " : " + dat.getMinutes() + " : " + dat.getSeconds(); tween.start(0, '-20'); break; case '-20' : break; } } testTimer.zip
__________________
FlashPress.ru | Blog |
Часовой пояс GMT +4, время: 20:53. |
|
« Предыдущая тема | Следующая тема » |
|
|