Форум 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=133850)

megapup 14.12.2009 21:05

Область перерисовки не успевает за объектом
 
Вложений: 1
почему то при быстром перемещении спрайта с битмапом, этот самый битмап не успевает отрисовываться
на картинке справа шарик без движения, слева при перемещении
красным область перерисовки
почему так происходит?

Psycho Tiger 14.12.2009 21:18

Странно. Дайте код.

megapup 14.12.2009 21:31

примерно такой
Код AS3:

ball = new Sprite();
var Btm:Bitmap =  из файла
ball.addChild(Btm);
//...
stage.addEventListener(Event.ENTER_FRAME, ef);
//...
function ef()
{
        ball.x+=1;
        ball.y+=1;
        //...
}


tofflife 14.12.2009 21:42

А если попробовать так?

Код AS3:

ball = new Sprite();
var Btm:Bitmap =  из файла
var percent:Number = 0;
const startX : Number = 0;
const startY : Number = 0;
const destX : Number = 520;
const destY : Number = 390;
ball.addChild(Btm);
//...
stage.addEventListener(Event.ENTER_FRAME, ef);
//...
 
 
function ef()
{
        ball.x = (destX - startX) * (percent / 100);
        ball.y = (destX - startX) * (percent / 100;
        percent = percent + 0.1;
        if (percent >= 100)
        {
              stage.removeEventListener(Event.ENTER_FRAME, ef);
        }
        //...
}

Так рекоммендуют делать во многих пособиях по играм.

megapup 14.12.2009 21:57

дак попробывать конечно можно) но у меня то закон перемещения свой)
может есть другой метод анимации, не в Event.ENTER_FRAME ?

Psycho Tiger 14.12.2009 23:04

Гм, как будто процессор не успевает за перерисовкой...
Выложи swf`ку :)

alatar 16.12.2009 06:16

Вам надо шашеки или ехать? Вас не устраивает только отображение области перерисовки или есть еще какие-то проблемы?

megapup 16.12.2009 22:24

Вложений: 1
вот swf-ка и код, но дело в том что наблюдается глюк не всегда, при определенных условиях, нужно немного подождать или попытаться изменить скорость (var speed)

iflamberg 16.12.2009 22:31

такой глюк происходит, возможно, из-за того, что вы назначаете битмапу не целые кординаты. Попробуйте
Код AS3:

ball.x=Math.round(ballX+=vector.x*speed);
                        ball.y = Math.round(ballY += vector.y * speed);


Psycho Tiger 16.12.2009 22:35

О боже, код читать ваш очень сложно...
Код AS3:

addChild(ball.addChild(new BallPic).parent);

Я умер.
Код AS3:

ball.x=ballX+=vector.x*speed;
ball.y=ballY+=vector.y*speed;

Добило трупа.
В общем, картинки когда на дробных координатах располагаются - подобные спецэффекты и появляются.

megapup 16.12.2009 22:48

а ну я просто думал что sprite.x это целое, моя вина))
но...не помогло округление к сожалению
сделал даже так
Код AS3:

var prex:int=Math.round(ballX+=vector.x*speed);
var prey:int=Math.round(ballY+=vector.y*speed);
if(prex!=ball.x||prey!=ball.y)
{
        ball.x=prex;
        ball.y=prey;
}

чтобы координаты x и y применялись только если изменятся, хотя это тоже не помогло

Добавлено через 12 минут
кстати пробывали не-битмапом а в векторном виде сделать, во flash'е сделали и потом через swc добавили, та же самая ботва получается, при перемещении на больших скоростях, объект не успевает рисоваться, причем иногда успевает а иногда нет, мощность процессора не причем, я даже считал fps swf-ки, он не уменьшается ни на сколько от заданной

iflamberg 16.12.2009 23:03

а что за проблема собственно? я как не старался, никаких багов не вижу. Чать изображение становится невидным?
у меня вот так всегда:
http://img225.imagevenue.com/loc646/..._122_646lo.jpg

megapup 16.12.2009 23:15

наблюдается проблема описанная и показанная в первом посте, как я сказал поймать сложно, я выбрал ту скорость при которой глюк наблюдается у меня почти всегда, я потому и не хотел выкладывать ни код ни swf-ку потомучто сложно продемонстрировать, я думал кто встречал подобное сможет объяснить
на других компах проверял, тоже самое

iflamberg 16.12.2009 23:29

скриншот сделайте побольше. И скорость скажите, при которой глюк наблюдаете. И компьютера характеристики.

megapup 16.12.2009 23:43

скриншот не сделать, в момент нажатия принтскрина флешка притормаживается и шарик отрисовывается полностью, то что в первом посте это монтаж, чтобы наглядно показать в чем проблема
скорость выставлена в прожекте (framerate:60, speed=7)
комп intel-Q6600, 8800GT, 4GB, win7, флешлеер последний debug-версия

iflamberg 16.12.2009 23:59

Цитата:

скриншот не сделать, в момент нажатия принтскрина флешка притормаживается и шарик отрисовывается полностью
может быть вы недостаток человеческого зрения принимаете за дефект отрисовки. Когда какой-то объект быстро движется в реальном мире - изображение размывается. На компьютере - вспыхивают пиксели в одной точке, вспыхивают в другом месте: размытия не возникает. Из-за этого перемещение может выглядеть дерганым. Чтобы от этого избавиться - нужно рисовать за объектом шлейф. Например, с помощью фильтра Blur.
И еще. Такой большой фреймрейт выставлять бессмысленно. Большинство компов больше 40фпс не выдадут. Я уж не говорю о нетбуках и мобильных устройствах.

megapup 17.12.2009 00:53

нет, зрение непричем, видно четко и не только мне, размытие должно возникать кстати в любом случае изза замедленного гашения пиксела монитора и дерганым оно будет выглядеть какрас если framerate понизить, вот на вашем скриншоте видна цепочка прямоугольников, количество которых уменьшиться при уменьшении framerate а расстояние между ними соответственно увеличится (при сохранении скорости полета шарика ессно), вот вам и дерганье. попробую глюк на видео заснять

megapup 17.12.2009 11:52

Вложений: 2
вот сделал видео, качество не очень но видно хорошо угол у шарека
выглядит как НЛО :D

Psycho Tiger 17.12.2009 17:29

Ладно, я могу что сказать:
Если поставить у флешки фпс под 1 - то дефектов видно не будет. Значит, дело не в коде.
Если смотреть фпс - он не падает. Значит, дело не в производительности.
Поэтому этот эффект можно отнести к багам флешплеера (я не до конца понимаю практическую суть проблемы), либо к человеческому зрению. Ни то, ни другое мы изменить не в силах.

etc 17.12.2009 18:35

Минут пять пялился в этот мячик, так ничего неправильного не увидел.
Это вы у монитора спросите, что его так плющит.

GentleFLASH 17.12.2009 19:47

megapup предлагаю найти CRT монитор с разверкой 120Гц и понаблюдать это дело уже на нем. Думаю результат приятно удивит )

VVall 17.12.2009 19:58

Как можно не увидеть проблемы на видео - не представляю. У человека шарик летает, а не обрубок шарика, но виден именно обрубок. От монитора такого быть совершенно никак не может, на стоп-кадрах видео всегда должен быть виден нормальный шарик, но на некоторых кадрах два (один гаснет с предыдущего кадра). Это явно проблема отрисовки.

Почему такое происходит - идей нет.

GentleFLASH 17.12.2009 20:18

ну как, если быстро на одном месте дергать мышкой, то курсоров тоже можно штуки 3-5 увидеть иногда, под ХП у меня такое бывает и на CRT тоже, видюха nVidia, может из-за нее

iflamberg 17.12.2009 20:37

по видео вообще ничего не понимаю. Оно что на телефон снято? Мячик совсем другой, и он ясно обрезан.
Короче не понятно, что там у автора.

nuToH 17.12.2009 21:01

сколько фпс заданно? у меня моник 60герц - обрезано пол шара постоянно)

megapup 17.12.2009 21:38

хз может и изза моника, но сомневаюсь чесно говоря, могу поспорить если написать прогу например на С с полной имитацией происходящего, т.е. 60 рас в секунду буду рисовать тот же шарег, то никаких глюков не будет наблюдаться
nuToH, 60.

GentleFLASH 17.12.2009 23:07

megapup возможно в режимах directDraw и direct3D видюха по-другому работает. Если не затруднит - напиши и выложи, мне тоже интересно сравнить. Только для windowed режима плиз )


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

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