Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Плавное перемещение объектов
as-masterДата: Понедельник, 22 Октября 2007, 13:00 | Сообщение # 1
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Существует очень большая проблема при создании красивых мультимедийных проектов,
когда вы хотите реализовать всевозможные плавные перемещения объектов в окне проекта.

Существуют две команды для перемещения объектов - MoveTo и MoveObject.
Первая из них как раз и реализует плавное перемещение. Записывается просто, например:

MoveTo("Object","x,y,s"),

где x и y - координаты, в которые нужно переместить, а s - скорость перемещения.
Например, при s=1000 перемещение будет довольно медленным, а при s=10 - достаточно быстрым.

Однако при работе этой команды загрузка процессора резко прыгает вверх: например,
загрузка моего пентиума-3000 с 3 процентов скачет до 50 или даже выше.

Команду MoveObject перемещает объекты одномоментно в конечную точку, однако её также
можно использовать для плавного перемещения объектов, если заключить её в такой вот цикл
(пример перемещения по оси X):

For i=x1 To x2
  MoveObject("Object","i,ObjectY(Object)")
  Pause("10")
  Refresh("")
Next i

здесь x1 и x2 - начальная и конечная точки перемещения.
Теоретически, скорость перемещения можно регулировать, изменяя величину паузы в команде Pause().
Однако лучше этого не делать, а использовать коэффициент ускорения или замедления. Для ускорения
перемещения это будет выглядеть так:

For i=x1/k To x2/k
  i=i*k
  MoveObject("Object","i,ObjectY(Object)")
  Pause("10")
  Refresh("")
Next i

а для замедления - так:

For i=x1*k To x2*k
  i=i/k
  MoveObject("Object","i,ObjectY(Object)")
  Pause("10")
  Refresh("")
Next i

нужно только учитывать, что x1/k, x2/k, x1*k и x2*k должны быть ЦЕЛЫМИ числами.

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

Народ - проверьте у себя оба варианта перемещения объектов, причем попробуйте перемещать
не только примитивный объект, но и картинку. Готовый пример, чтобы вам не париться, прилагаю.


Да пребудет с вами ММВ!
 
as-masterДата: Понедельник, 22 Октября 2007, 13:47 | Сообщение # 2
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Пример перемещения объектов описанными выше способами:







Прикрепления: 5786615.zip (0.9 Kb)


Да пребудет с вами ММВ!
 
humanoidДата: Понедельник, 22 Октября 2007, 16:02 | Сообщение # 3
Гуманоид
Группа: Проверенные
Сообщений: 406
Репутация: 3
Награды: 1
Статус: Offline
Эхс.. "ну нафига козе баян?"

Чего-чего, а вот к этим фичам я никогда серьзно не относился.. они спасают в очень редких случаях... пара-тройка назначений для определенных малеьких задач...

Знаю... будешь возражать и отстаивать их нужность, а таже приводить мне кучу своих реализованных проектов, в которых это есть.... но... некумарять они меня эти штучки...

К тому же все замирает, когда это в процессе...


Hi, from Moon!
 
as-masterДата: Понедельник, 22 Октября 2007, 19:31 | Сообщение # 4
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Мы здесь говорим вовсе не о том, нужно это или не нужно.
Флеш, например, без перемещения объектов уже не флеш.
Ну а если я стараюсь в проекте обходиться без флешек,
то почему бы мне не создавать, к примеру, выплывающие меню?

И вообще, делается это всё не ради понта, а с конкретной целью.
Лишние понты я и сам не люблю.




Да пребудет с вами ММВ!
 
ИгорьДата: Пятница, 02 Ноября 2007, 08:53 | Сообщение # 5
Педагог
Группа: Проверенные
Сообщений: 331
Репутация: 0
Награды: 0
Статус: Offline
Проверил. И в том, и другом случае, при любых картинках и скоростях - 100% загруженность процессора.

Шум ничего не доказывает. Курица, снесши яйцо, часто клохчет так, словно снесла небольшую планету...
Марк Твен
 
  • Страница 1 из 1
  • 1
Поиск: