Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вращение текстового поля (http://www.flasher.ru/forum/showthread.php?t=202596)

pekinessik 26.07.2013 03:05

Вращение текстового поля
 
Всем привет. Только что начал разбираться с AS3 , и возникла такая проблема; создаю текстовое поле, внедряю шрифты и мне надо его плавно повернуть по оси Y на 20, а потом плавно вернуть в исходное состояние. Как это можно реализовать? Спасибо.

Код AS3:

 
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;
}


Srednas 26.07.2013 08:36

Как вариант, немного изменить ваш код:
Код AS3:

// можно добавить пару переменных
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); // удаляем слушатель, чтоб не было боьше передвижения
                }
}

А потом, когда немного освоитесь с AS3, можете поэкспериментировать с твинами или с такими замечательными штуками, как библиотеки, например от GreenSock.

maincode 26.07.2013 11:19

Или можно использовать библиотеку FPTween:
testRotation.swf
Код AS3:

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;
                        }
                }
        }
}


pekinessik 26.07.2013 14:31

Вложений: 1
Первый вариант не трансформируе и не отображает текст вообще. На второй вариант выбивает ошибка: "Монтажный кадр 1, слой "Слой 2", кадр 1, строка 5 1037: Пакеты не могут быть вложенными."

maincode, не могли бы Вы сбросить fla исходник и подтолкнуть в какю сторону двигаться, чтобы трансформация была не по клику, а выполнялась все время циклично?

еще вопрос: во вложенног файле должно поварачиваться время, оно не поворачивается и секунды накладываются друг на друга. Как мне это мсправить? Спасибо.

maincode 26.07.2013 15:15

по коду не понятно то вы вообще пытаетесь сделать :) какой результат необходимо получить?

pekinessik 26.07.2013 20:06

мне надо, чтобы часы искажались туда-обратно, как у Вас в примере, только не по клику, а чтобы все время искажение было (циклично)

maincode 27.07.2013 10:26

Вложений: 2
Код AS3:

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;
        }
}

Не забудьте подключить либу FPTween.swc (в архиве). Подробную информацию(asdoc и примеры использования) о библиотеке FPTween можно посмотреть здесь.
testTimer.swf   (8.5 Кб)

Вложение 29856


Часовой пояс GMT +4, время: 09:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.