Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2013, 16:03   #1
FomAW
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 30
По умолчанию Проблема с движением 2D человека.

Написал программу передвижения человека по экрану, периодически меняя картинку, создавая эффект движения. Для всех трех картинок использовал компонент TImage. При однократном нажатии на клавишу d человек передвигается по экрану отлично т.е. все три картинки меняются в нужной последовательности! Но если её удерживать, появляются только две картинки из трех. В программировании новичек. Но очень хочу разобраться с этим! Может подскажите, что делать?
Вложения
Тип файла: zip Man.zip (3.09 Мб, 14 просмотров)

Последний раз редактировалось FomAW; 16.03.2013 в 20:01.
FomAW вне форума Ответить с цитированием
Старый 16.03.2013, 17:41   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от FomAW Посмотреть сообщение
Может подскажите, что делать?
Самое первое - учиться правильно в письменном виде формулировать свои мысли.
Поверьте, не важно, на русском пишет человек или на Delphi - это умение одинаково важно.
"все нормально" - это как?
"идет с ошибками" - а это?
s-andriano вне форума Ответить с цитированием
Старый 20.03.2013, 11:18   #3
nuberod
криворукий
Пользователь
 
Аватар для nuberod
 
Регистрация: 07.05.2012
Сообщений: 78
По умолчанию

юнит 2 пас найти не может
nuberod вне форума Ответить с цитированием
Старый 20.03.2013, 12:59   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

for nuberod
Просто путь к Unit2.pas прописан как "Unit2 in '...\Man-Two scrin\Unit2.pas' {Form2};"
Вот поэтому и не может найти.
for FomAW
А зачем вам 3 таймера и 2 имайджа?
Тут можно обойтись нажатием кнопок и наложением с помощью BitBlt.
Картинку взял отсюда.
Вот пример:
Вложения
Тип файла: rar Новая папка.rar (141.8 Кб, 16 просмотров)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 20.03.2013 в 13:49. Причина: Добавление исходника, ссылка на картинку
Rin вне форума Ответить с цитированием
Старый 20.03.2013, 19:23   #5
FomAW
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 30
По умолчанию

Rin Спасибо! Но как я уже говорил в программировании я новичек. Не могли бы вы немного по подробнее объяснить мне об этих функциях?
FomAW вне форума Ответить с цитированием
Старый 20.03.2013, 23:11   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

В переменную BM:TBitMap загружается картинка. TBitMap по сути растр, и в него можно грузить картинки bmp формата.
Сначала для переменной BM нужно выделить память. Это делается
строкой
Код:
BM:=TBitMap.Create;
Далее нужно загрузить в нее картинку. Это делается строкой
Код:
BM.LoadFromFile('путь и имя файла с расширением');
Правда, нужно было ещё добавить структуру "try finally". Почитайте про нее ТУТ.

Строка
Код:
if key=39 then
говорит о том, что если нажали "стрелка вправо, то"
39- её код в ASCII. Если интересны другие коды клавиш, то об этом можно почитать ТУТ
Теперь мы должны взять определенную область с нашей картинки.
За это отвечает строка
Код:
BitBlt(Form1.Canvas.Handle,0,0,107,136,
BM.Canvas.Handle,kadrx*107,Kadry*136,SRCCOPY)
Эта функция копирует (если последний параметр равен SRCCOPY) растровую область из источника в приемник. Она может не просто копировать, но и инвертировать цвета, копировать маски, но должны стоять другие значения.
Параметры этой функции:
1) дескриптор приемника ([b]Handle[\b]) типа HDC;
2) координата Х левого верхнего угла области, в которую копируем;
3) тоже самое, только для Y;
4) размер области приемника по Х;
5) размер области приемника по Y;
6) дескриптор источника ([b]Handle[\b]) типа HDC;
7) координата Х левого верхнего угла области, из которой копируем;
8) тоже самое, только для Y;
9) код растровой операции.
Про другие коды растровых операций можно почитать здесь или
здесь

Ну, и при закрытии программы нужно освободить память, выделенную под нашу картинку.
Это делает строка
Код:
BM.Free
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 20.03.2013 в 23:15.
Rin вне форума Ответить с цитированием
Старый 21.03.2013, 15:42   #7
FomAW
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 30
По умолчанию

for Rin
Спасибо! Очень помогли.

Последний раз редактировалось FomAW; 21.03.2013 в 16:16.
FomAW вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложности с движением экселевского фокуса ввода из под ворда alt2 Microsoft Office Word 10 21.10.2011 23:54
[Pascal] Помогите с движением змейки Рамик Помощь студентам 5 08.09.2009 21:53
Проблема с движением вокруг своей оси. intelx1989 Общие вопросы Delphi 3 14.05.2009 18:02
Как избавиться от появления хвоста за движением эдита edit? Горожанин Мультимедиа в Delphi 9 30.04.2009 14:40
Управление движением объекта мышью program123 Общие вопросы Delphi 9 08.03.2009 20:11