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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2010, 22:45   #1
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
Стрелка Проблема с прозрачностью (Transparent)

Спасибо за помощь. Немного отвлекусь от монстров: у меня возникла проблема с прозрачностью игрока - то есть при его движении он перекрывается фоном соседних клеток - не работает "Transparent:= true;"
В общем, сами посмотрите. Остальные монстры не двигаются(так пока-что надо). Первоначально игроком должен был быть "Pictures/player1.bmp" - он и сейчас им должен быть.

P.S. Очень срочно надо.Заранее благодарю
Вложения
Тип файла: rar MapGenerator 6x6.rar (14.7 Кб, 16 просмотров)
Pyton вне форума Ответить с цитированием
Старый 19.02.2010, 23:13   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Помимо Transparent необходимо еще установить TransparentColor на значение цвета прозрачности. Т.е. если TransparentColor будет clRed, то при рисовании функцией Draw прозрачными будут все пиксели этого цвета.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 19.02.2010, 23:33   #3
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Не работает. Попробуй пожалуйста исправить в моем коде.
А за что отвечает свойство TransparentMode и какие оно значения может принимать?
Pyton вне форума Ответить с цитированием
Старый 20.02.2010, 10:55   #4
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

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

P.S. А игрок перетирался потому, что Вы текстуры рисовали после игрока, т.е. поверх него...
Вложения
Тип файла: rar MapGenerator 6x6.rar (19.3 Кб, 11 просмотров)

Последний раз редактировалось Ckomoroh; 20.02.2010 в 19:44.
Ckomoroh вне форума Ответить с цитированием
Старый 21.02.2010, 02:35   #5
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию Поиск пути

00:03

Большое спасибо! Скажите пожалуйста, а для чего нужен вывод объектов на экран, сразу после того, как они были сгенерированы.

02:35

Теперь возникла проблема с поиском пути в этой же игре. Использую волновой алгоритм + рекурсивную функцию. Помогите пожалуйста разобраться, что не так (монстры считаются как проходимые клетки).

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Уважайте форумчан, и они ответят вам взаимностью...
Модератор
Вложения
Тип файла: rar 6x6+searchway.rar (19.8 Кб, 11 просмотров)

Последний раз редактировалось mihali4; 21.02.2010 в 02:44.
Pyton вне форума Ответить с цитированием
Старый 21.02.2010, 12:52   #6
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

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

Про поиск пути к сожалению не знаю - я для этого слишком глуп!....=(
Ckomoroh вне форума Ответить с цитированием
Старый 23.02.2010, 00:06   #7
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию Время действия бонуса

1. У меня через определенное время после "поднятия" игроком бонуса скорости есть,допустим,5 секунд,в течение которых скорость по x и по y увеличивается в 2 раза(например). У меня не получается с реализацией:

Цитата:
...
btime:= gettickcount;
ax:= 8; // ускорение по x
ay:= 8; // ускорение по y
if btime = 5000 then begin
ax:=0;
ay:=0;
...
end;
Игрок ускоряется, но больше никогда не замедляется. Теперь у него постоянная скорость, в 2 раза большая от начальной.
Я подозреваю, что ошибка в том, что данный код находится в обработчике события таймера. Надо ли как-то использовать св-во Timer1.Interval, равный у меня 50?

Проблема кроется в том, что каждые 50 миллисекунд у меня начинается новый отсчет, потому что btime:= gettickcount; находится в обработчике события таймера. Я ставил его вне таймера - тогда ускорения не было вообще. Как решить данную проблему?
Помогите пожалуйста, очень срочно надо.



2. Возвращаюсь опять к поиску пути. При запуске выскакивает ошибка(смотреть screen1.jpg).Stack overflow(переполнен стэк памяти) - я так понимаю, это происходит из-за бесконечного поиска. Верна ли моя догадка? Что не так?

Код:
Цитата:

... len:=1; // длина пройденного пути
path:=0; // кол-во возможных путей
counts: array[1..20,1..15] of integer; // вспомогательный массив целых чисел, необходимый для реализации волнового алгоритма,
// равный размерам реальной карты

procedure pf(xs,ys: integer); // поиск пути; xs и ys - номера клетки карты, откуда начинаем поиск.
begin // Надо найти пути к выходу-двери,заданной клетками(xd,yd);
if map[xs,ys] = '3' then // если препятствие вокруг тебя и выхода нет, то выходим
exit;
if ((xs=xd) and (ys=yd)) // если нашли выход, то увеличиваем кол-во реальных(где можно пройти) путей на 1; выходим.
then begin
inc(path);
exit;
end;
pf(xs+1,ys); // а теперь рекурсивно вызывая процедуру, ищем путь вправо
counts[xs+1,ys]:= len; //теперь расставляем циферки в соседних клетках, начиная с 1.
pf(xs-1,ys); // делаем волну налево
counts[xs-1,ys]:=len;
pf(xs,ys+1); // делаем волну вверх
counts[xs,ys+1]:=len;
pf(xs,ys-1); // делаем волну вниз
counts[xs,ys+1]:=len;
inc(len); // увеличиваем пройденный путь
if path = 1 then exit; // когда нашли первый проходимый путь - прекращаем искать дальше. Тут можно поставить любое значение,сколько захотите.
end;

3. Чуть-чуть продвинулся, немного улучшил поиск пути, но он все равно не работает. Специально сделал так, чтобы выводился массив counts в каждую клетку - и что выходит? Все элементы массива counts равны нулю! Почему это происходит? Может, как-то надо инициализировать массив или рекурсивную функцию?

Цитата:
... len:=0; // длина пройденного пути

procedure pf(xs,ys: integer); // поиск пути; xs и ys - номера клетки карты, откуда начинаем поиск.
begin // Надо найти пути к выходу-двери,заданной клетками(xd,yd);
if (map[xs,ys] = '3') or (len >= counts[xs,ys]) then // если препятствие вокруг тебя и выхода нет, то выходим
exit;
if (map[xs,ys] = '9') // если нашли выход, то увеличиваем кол-во реальных(где можно пройти) путей на 1; выходим.
then begin
inc(path);
exit;
end;
counts[xs,ys]:=len; //теперь расставляем циферки в соседних клетках, начиная с 0 (точки (xs,ys)).
inc(len);
pf(xs+1,ys); // а теперь рекурсивно вызывая процедуру, ищем путь в четырех направлениях
pf(xs-1,ys);
pf(xs,ys+1);
pf(xs,ys-1);
dec(len);
if (path = 1) or (len > 40) then exit; // когда нашли первый проходимый путь - прекращаем искать дальше. Тут можно поставить любое значение,сколько захотите.
// дополнительно ставлю ограничение на длину пути
end;
Изображения
Тип файла: bmp screen1.bmp (1.68 Мб, 124 просмотров)
Вложения
Тип файла: rar 15x20 searchway(exe).rar (174.0 Кб, 10 просмотров)
Тип файла: rar 15x20 searchway(source).rar (21.8 Кб, 12 просмотров)

Последний раз редактировалось Pyton; 23.02.2010 в 12:22. Причина: спешу!
Pyton вне форума Ответить с цитированием
Старый 23.02.2010, 14:02   #8
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Насчет бонусов.
Заводите переменные - текущий шаг бонуса(btek), и время которое действует бонус(b) и маркер взят ли бонус(bmar). После чего в условие взятия бонуса пишите.

Код:
btek:=0;
vx:=vx*2;
vy:=vy*2;
bmar:=true;
После чего в таймере пишите

Код:
if bmar=true then
begin
if btek<=b then btek:=btek+1
  else begin
        bmar:=false;
        vx:=vx div 2;
        vy:=vy div 2;
        end;
end;
Ckomoroh вне форума Ответить с цитированием
Старый 23.02.2010, 19:25   #9
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ребят, вы в курсе как тема именуется?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 25.02.2010, 00:17   #10
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Ура! Ура! Ура! Я решил проблему с поиском пути - я использовал другой алгоритм: поиск в глубину. Хотя многие его недолюбливают, он все равно имеют право на существование. Он не находит кратчайший путь, но для моей игры это и не надо - надо просто проверить, есть ли вообще путь.
С этой задачей он справляется на ура, учитывая еще то, что размеры карты невелики - всего 300 клеток.

Но после удачного решения возникла новая проблема: дело в том, что после генерации карты я сразу проверяю, есть ли путь. Если нету, то генерю карту до тех пор, пока ни появится хоть один путь. Все бы было хорошо, так как, еще раз повторюсь, путь он находит четко, и останавливается вовремя, но резко начинает тормозить, вследствие чего игра уже не работает: игрок попросту не может сдвинуться с места, так как комп не реагирует на нажатия клавиш. Также нагрузка на проц достигает 50% и более! То есть в обычном режиме, до запуска игры, 10%, после запуска с проходимой картой - 15%, а после долгой генерации зашкаливает!

Мое предположения: после поиска пути в памяти остается слишком много мусора, возможно, проблема в том, что картинки засоряют память!
То есть каждая занимает чуть более 3 кб места, карта - 300 клеток, следовательно, после 20 одновременных генераций(а такое у меня было) сжираются 20 мб памяти и переполняется стэк.

Как решить данную проблему и верны ли мои предположения?

Последний раз редактировалось Pyton; 25.02.2010 в 00:20.
Pyton вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нормальный Transparent в Image??? Fre5h Компоненты Delphi 1 10.07.2008 08:44
Помогите с прозрачностью Maxone Общие вопросы .NET 0 25.05.2008 08:37
Помгите с прозрачностью формы? SeЯgey Помощь студентам 3 16.05.2008 22:45
Текст с прозрачностью mutabor Общие вопросы Delphi 3 10.03.2008 20:33
Transparent в TMemo Roof Помощь студентам 2 01.08.2007 20:48