Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Плавный Zoom(smoothed) (http://www.flasher.ru/forum/showthread.php?t=210703)

LighFusion 23.04.2015 17:14

Плавный Zoom(smoothed)
 
Не могу понять как сделать - плавный зум - приближение камеры.
На данный момент простой зум - осуществляется через этот код
Код AS3:

stage.addEventListener(MouseEvent.MOUSE_WHEEL, wheel, false, 0, true);
 
private function wheel(evt:MouseEvent):void{
 
                        if (evt.delta < 0)
                        {
                                controller.distance *= 1.10;
                        }
                        else
                        {
                                controller.distance /= 1.1;
                        }
                        return;/
 
                }

controller - взял отсюда, с его помощью осуществляется плавное вращение - с этим никаких проблем нету, но я не пойму как это адаптировать для зума ?

Пробовал делать это через - bool, if evt.delta<0 zoom == true, controller.distance *=1.10, но тогда возникает проблема - бесконечного отдаления, либо приближения, как это можно решить ?

caseyryan 23.04.2015 18:04

Можно использовать твин движок. Тут в самый раз будет caurina tweener. Передавать туда начальный размер и конечный, и время за которое он должен быть достигнут

LighFusion 23.04.2015 20:26

Цитата:

Сообщение от caseyryan (Сообщение 1181589)
Можно использовать твин движок. Тут в самый раз будет caurina tweener. Передавать туда начальный размер и конечный, и время за которое он должен быть достигнут

В общем немного обмозговав получилось сделать такое
Код AS3:

private var zoomOverTimeCameraFactor:Number;
public var zoomOverTimeFactor:Number;
zoomOverTimeFactor = 0;
zoomOverTimeCameraFactor = 1;
 
          if (zoomOverTimeFactor > 0 )
        {
            (zoomOverTimeFactor - 1);
            //zoomin=true;
 
            if (zoomOverTimeFactor > 0)
            {
                controller.distance -=  zoomOverTimeFactor * zoomOverTimeCameraFactor;
 
            }
            else
            {
                zoomOverTimeFactor = 0;
            }
 
        }
        if (zoomOverTimeFactor < 0 )
        {
            (zoomOverTimeFactor + 1);
 
            if (zoomOverTimeFactor < 0 )
            {
                controller.distance -=  zoomOverTimeFactor * zoomOverTimeCameraFactor;
 
            }
            else
            {
                zoomOverTimeFactor = 0;
            }
        }
    private function wheel(evt:MouseEvent):void{
 
        if (evt.delta < 0)
        {
 
            //controller.distance *= 1.10;
            zoomOverTimeFactor =-10;
 
        }
        else
        {
            //controller.distance /= 1.1;
            zoomOverTimeFactor = 10;
            //zoomin = true
 
 
        }
        //return;
 
    }

p.S.
В общем сгновно-кодил костыль - мож кому пригодиться ?

Код AS3:

            if (zoomOverTimeFactor > 0)
            {
                controller.distance -=  zoomOverTimeFactor * zoomOverTimeCameraFactor;
                if(controller.distance >0)
                    zoomOverTimeFactor /= 1.1;
            }

Буду не-прочь увидеть - решение по лучше!


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

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