Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> произвольное перемещение Image по форме 
:(
    Опции темы
Volkogriz
  Дата 24.10.2014, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: нет
Всего: 1



Доброе время суток! 
У меня вот такая проблема:
Не получается сделать движение Image по форме и отражение его от краёв (  
Задумка такая каждые 10 секунд появляется анимация но хотелось бы что бы она появлялась в разных местах формы, помогите как осуществить такое? 
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
SaiLight
Дата 25.10.2014, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.9.2014

Репутация: 0
Всего: 0



Основная переменная - позиция центра объекта (контейнера с изображением). Дополнительные: размер объектаномер кадра анимации, количество кадровчастота смены кадроввидим ли объектдлительность его присутствия... Допустим, так:

Код
TMyObject = Record
    X, Y: Integer;//Позиция объекта
    Width, Height: Integer;//Размеры объекта
    FrameNum: Integer;//Номер кадра
    FramesCount: Integer;//Количество кадров
    FrameSpeed: Integer;//Частота смены кадров
    LifeTime: Integer;//Время жизни объекта
    LivedSteps: Integer;//Прожитое время
    IsVisible: Integer;//Видим ли объект?
end;


Далее, все основные операции делятся на 2 категории: расчет позиции и расчет параметров вывода объекта на экран. По идее, можно реализовать данную задачу и без Image, выводя графику на Canvas формы, но подобный подход не исключает и использование данного компонента - просто вместо функции вывода графики на Canvas используйте функцию присваивания изображения компоненту (не помню, как там, возможно, Assign).

Нечто подобное (только в более расширенной версии) некогда было реализовано мною в открытой игре RoboTir (прямая ссылка). Там же реализованы и анимация, и возможность отскакивания изображений от краев экрана.
PM MAIL   Вверх
Volkogriz
Дата 25.10.2014, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: нет
Всего: 1



Нет вы не поняли я поясню, мне ни анимацию двигать надо а сам  Image по форме чтоб он в разных местах появлялся на форме через например 10 секунд) в эти десять секунд он пустой. надо его просто передвигать до очередной анимации сам компонент. Прикреплю проект чтоб понятней стало))
Я не когда не сталкивался с анимацией и с передвижением) если есть возможность дать исходник чтоб покопаться и понят буду благодарен!
Спасибо за внимание!
С уважением,
Денис!

Это сообщение отредактировал(а) Volkogriz - 25.10.2014, 00:39

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Project.zip 428,91 Kb
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
SaiLight
Дата 25.10.2014, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.9.2014

Репутация: 0
Всего: 0



Ну тогда, опять же, работаем с его позицией, например, изменяя ее в таймере. В представленном мною выше проекте вычисление позиции идет при помощи переменной, отвечающей за направление движения объекта, а отскакивание объекта от краев формы - изменением этой переменной. Вот вырезка кода, отвечающего за эти действия:

Код

//Пересчет позиции
  vNewPos.X := Round(FPos.X + Cos(FMoveAngle * Pi) * (FSpeed - FSlowDown + FPower)) * FDeadSpeed;
  vNewPos.Y := Round(FPos.Y + Sin(FMoveAngle * Pi) * (FSpeed - FSlowDown + FPower)) * FDeadSpeed;
//Столкновения
  if (vNewPos.X <= 0) or (vNewPos.X >= FBox.X) then FMoveAngle := Pi - FMoveAngle else
  if (vNewPos.Y <= 0) or (vNewPos.Y >= FBox.Y) then FMoveAngle := -FMoveAngle else
    FPos := vNewPos;
  if (FMoveAngle > 2 * Pi) then FMoveAngle := 2 * Pi - FMoveAngle;
  if (FMoveAngle < - 2 * Pi) then FMoveAngle := 2 * Pi + FMoveAngle;

За правильность формул не ручаюсь - проект был написан несколько лет назад, но у меня все работало довольно неплохо. В вашем случае, FPos.X и FPos.Y - позиция Image, FSpeed - скорость перемещения объекта, а на FSlowDownFPower и FDeadSpeed вообще можно не смотреть.

Это сообщение отредактировал(а) SaiLight - 25.10.2014, 00:41
PM MAIL   Вверх
Volkogriz
  Дата 25.10.2014, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: нет
Всего: 1



Благодарю за помощь!
Не сочтите  за наглость! 
Есть просьба не могли бы вы подставить переменные к коду или отредактировать мой проект? просто не могу честно понять ( 
Если есть время! 
С уважением,
Денис! 

Это сообщение отредактировал(а) Volkogriz - 25.10.2014, 00:57

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Project.zip 379,38 Kb
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
SaiLight
Дата 25.10.2014, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.9.2014

Репутация: 0
Всего: 0



Volkogriz, ваш проект у меня не компилируется, поэтому решил реализовать задачу в отдельном проекте - простое перемещение компонента Image с отскакиванием от краев формы. Как я и предполагал, алгоритм не дает реалистичной физики при отражении, но вполне может быть применен уже так или с некоторыми незначительными дополнениями. Если честно, не понимаю, зачем вам нужно именно перемещение объекта в невидимом состоянии, когда можно просто создавать (показывать) его в случайном месте на форме.

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  ImageMove.zip 25,40 Kb
PM MAIL   Вверх
Volkogriz
Дата 25.10.2014, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: нет
Всего: 1



Я бы с удовольствием так бы и сделал!
Я просто ни когда не имел дела с графикой и без наглядного пособия я буду долго вкуривать)))
Огромное спасибо за помощь! 
С уважением,
Денис! 

--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
SaiLight
Дата 25.10.2014, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.9.2014

Репутация: 0
Всего: 0



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

Код

imgObject.Left := Random(ClientWidth - imgObject.Width);
imgObject.Top := Random(ClientHeight - imgObject.Height);

PM MAIL   Вверх
Volkogriz
Дата 25.10.2014, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: нет
Всего: 1



Благодарю!!!
Вроде сейчас более красивей бегает блин))
Обращусь обязательно!
С уважением,
Денис! 
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.