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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2008, 23:24   #1
CyberOrcX
Заблокирован
Форумчанин
 
Регистрация: 27.04.2008
Сообщений: 103
Восклицание Начал делать игру и застрял... GDI-графика

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

как избежать этого?
я пишу на Delphi.

Последний раз редактировалось Beermonza; 16.10.2008 в 23:12.
CyberOrcX вне форума Ответить с цитированием
Старый 15.10.2008, 10:10   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

перед отображением нового кадра(движение картинки) нужно очистить то, что уже было нарисовано.

Form1->Canvas->Brush->Color=0xFFFFFF;
Form1->Canvas->FillRect(Rect(0,0,ClientWidth,Clie ntHeight));

Последний раз редактировалось Kostia; 15.10.2008 в 14:10.
Kostia вне форума Ответить с цитированием
Старый 15.10.2008, 13:44   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Каким методом происходит передвижение?
Стандартный подход следующий - запоминаешь фон,куда будет выводиться рисунок.Размер фона равен размеру рисунка.Выводишь рисунок.Перед очередным передвижением "затираешь" рисунок запомненым фоном,снова запоминаешь фон в новом положении рисунка
и выводишь рисунок.Далее все повторяется.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 16.10.2008, 18:33   #4
CyberOrcX
Заблокирован
Форумчанин
 
Регистрация: 27.04.2008
Сообщений: 103
Стрелка код...

ловите код...

mess.. mess.. mess.. mess.. message. (пись.. пись.. пись.. пись.. письмо)
Вложения
Тип файла: zip UnderSpace is flying.zip (216.9 Кб, 23 просмотров)
CyberOrcX вне форума Ответить с цитированием
Старый 16.10.2008, 18:54   #5
Taras
Пользователь
 
Регистрация: 28.11.2006
Сообщений: 14
По умолчанию

Перерисовать нужно основную канву перед вызовом процедуры перемещения.
Taras вне форума Ответить с цитированием
Старый 17.10.2008, 08:57   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

To CyberOrcX
Пытался разобраться в твоем коде, признаюсь, потом отказался.
Слишком много лишнего наворочено в коде для такой простой задачи -
вывести на экран звездолет, чтобы он постреливал изредка.Поэтому
вот тебе пример простого решения этой задачи.Используем три событийных процедуры формы : FormActivate - строим объекты типа
TBitMap для наших персонажей - это звездолет,снаряд и фон(космос
где происходят события).Я для эфекта добавил еще небольшой взрыв при
самоуничтожении снарядов.Заполняем TBitMap-ы нашими персонажами
(картинками).Здесь же строим буфер Buff, где будем производить все
изменения.Определяем размеры Buff и задаем начальные координаты
звездолета и снаряда.
В FormPaint выводим кртинку на форму(на экран).
В FormKeyDown управляем сдвигом звездолета и задаем выстрел.
Две дополнительные процедуры MovePlayer и MoveBullet формируют
движение соответствующих образов.ВСЕ.
Все предельно упрощено и, думаю, понятно.Сравни со своим кодом.
Но и это не предел.Если использовать вместо статических рисунков
спрайты, то даже такую примитивную стрелялку можно значительно
оживить добавив в нее динамичности.
Попробую позже показать это на примере.
Info: Абривеатура SSh - спейс шутер (стрелялка в космосе).
Совет : старайся всегда присваивать осмысленные названия.А то космический корабль у тебя почему-то называется Player, хотя насколько я понимаю Игрок вообще-то находится по другую сторону дисплея.
Вложения
Тип файла: rar SSh.rar (32.3 Кб, 20 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 17.10.2008, 12:45   #7
CyberOrcX
Заблокирован
Форумчанин
 
Регистрация: 27.04.2008
Сообщений: 103
По умолчанию мой код из-за этого...

мне 15 лет.
CyberOrcX вне форума Ответить с цитированием
Старый 17.10.2008, 13:49   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

2DeKot
Цитата:
Возраст:
55
Это правда?!

2CyberOrcX
Цитата:
мой код из-за этого... мне 15 лет.
И совсем даже не из-за этого. Просто малова-то знаний и практики.
Kostia вне форума Ответить с цитированием
Старый 17.10.2008, 14:50   #9
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
2DeKot

Цитата:
Возраст:
55

Это правда?!
Абсолютная правда!
To CyberOrcX
А это обещаная динамическая стрелялка.Постарайся разберись с кодом
- там все вроде бы не сложно.Добавь сюда кактх нибудь падающих астероидов или космических кораблей, сделай взрывы при столкновении с ними.Добавить интерфейса чуть-чуть - там меню, счетчики и т.п.
Получится полноценная простенькая игрушка.Если все таки будут сложности - спрашивай. Отвечу про все , что смогу.
Вложения
Тип файла: rar SpaceShutter.rar (32.0 Кб, 23 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 19.10.2008, 20:51   #10
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Где в SpaceShutter код, который затирает старое изображение корабля и выводит новое? Никак не могу разобраться.
Манжосов Денис :) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GDI EdNovice Win Api 4 12.02.2008 09:14
GDI plus API delphi_coder Win Api 1 28.09.2007 12:41
У меня свой сайт я хочу зделать онлайн игру! помогите те кто умеет делать флеш игры! Denfer Свободное общение 1 07.08.2007 14:06