Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   не получается плавного (сглаженного) движения спрайта с использованием copyPixel (http://www.flasher.ru/forum/showthread.php?t=137629)

Alex_YAROST_22 18.03.2010 16:54

не получается плавного (сглаженного) движения спрайта с использованием copyPixel
 
Собственно сабж. Примерный алгоритм построения игровой графики такой:

Используется двойная буферизация описанная здесь - http://www.makeyourgame.org.ua/flexfighters/part01.php

В флэшку встраивается графика

Код AS3:

    [Embed(source="../media/sisi.png")]
    public static var BrownPlane:Class;
    public static var BrownPlaneGraphics:GraphicsResource = new GraphicsResource(new BrownPlane());

И с этого ресурса делается копия в BitmapData для скорости обработки. у нас есть игровой объект и у него отдельное поле "bitmap" которое хранит его картинку.

Теперь самое главное, есть главный Canvas на graphics которого отрисовывается наш спрайт. Отрисовывается вот так:

Код AS1/AS2:

 
db.copyPixels(graphics.bitmap, graphics.bitmap.rect, position, graphics.bitmapAlpha, new Point(0, 0), true);

где:

db - собственно graphics игровой области
graphics.bitmap - ссылка на BitmapData содержащий спрайт

Уважаемые знатоки, внимание, вопрос!
Как "включить" режим сглаживания объекта, сделать вывод по дробным координатам?
Потому как сейчас он при выводе просто округляет координаты до ближайшего целого. не связано ли это с тем, что используется "низкоуровневая" операция copyPixels которая тупо копирует пиксель-в-пиксель и про сглаживание вообще ничего и слыхом не слыхивала? Это значит что smoothing надо реализовывать самому? :(

А вот и пример - http://2nets.ru/a1.swf

слева вверху реальные координаты объекта (женская грудь) взятые из его свойства position ну и дерганье я думаю вы сами видите :(

Alex_YAROST_22 22.03.2010 12:18

Уважаемые гуру форума, ну что же никто даже не намекнет ничего?

Может есть другой быстрый способ вывода игровой графики, а?

Волгоградец 22.03.2010 12:59

Да, copyPixels копирует только в целые координаты. Используй draw().

iflamberg 22.03.2010 13:14

откройте flash ide. cs3, cs4, не важно. Киньте на сцену маленький битмап. Выделите его, нажмите f8, оберните его в символ, название значения не имеет. Откройте библиотеку, откройте свойства битмапа (не символа, а битмапа), поставьте галочку Allow smoothing. Дайте мувику instance name "mc". Добавьте код на таймлайн:

Код AS3:

addEventListener (Event.ENTER_FRAME,efHr);
 
function efHr (e:Event):void {
        mc.x+=0.1;
        mc.y+=0.3;
}

что вы увидите? Увидите, что мувик медленно и плавно передвигается. Но при этом он становится то размытым, то чётким и это очень бросается в глаза. Так что, никаккое "субпиксельное" сглаживание вам не подходит. У вас нормальный подход, просто слишком низкая скорость перемещения, увеличте ее и все будет ок.


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

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