Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Закрытая тема
 
Опции темы
Старый 06.04.2007, 17:03   #1
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Печаль Помогите убить баг...

Короче делаю игру по типу лайнс... Про неё можна прочитать в теме "Играли бы вы в это?" в болтовне...

В аттаче лежит "редактор" и игра..

В игре управление мышой... (правой кнопкой добавить шарик)
Вводить название левла без формата .rtr

Баг заключается в сделующем. Когда мы толкаем шарики - они должны "скользить о бортики". Что это работает можна увидеть загрузив уровень "1". (Пока толкать можна только 1 шарик). Но если загрузить другие уровни. "2", "5" например, то можна заметить баг при толкании... Шарик не скользит, а выходит за пределы уровня... (это только в некоторых местах уровня)... Короче сами увидите...

помогите убить баг ... я никак не могу понять откуда он взялся...

+ если кому нада. управление в редакторе:

Создать новый тайл - N
Сохранить уровень - S
Выход - Q
Выделить - левая кнопка мыши
Снять выдиление - правая или пробел

перемещать кнопками управления курсора

сначала вводим название уровня. потом идет проверка. если такой уровень есть - нажимаем 1 что бы открыть. потом нужно нажать любую кнопку...
(Offline)
 
Старый 06.04.2007, 19:33   #2
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

up

только ща заметил что архив не приаттачил! оказываеццо что моих файлов на форуме ужо на 31 мб пришлось усё нах снести...

да ишо! если вы уже скачали то там наверняка при компиляции вылетит ошибка... в том месте просто нужно заменить Tail2 на Tail... случайно поставил 2.. и только что заметил...

архив ща поправлю
(Offline)
 
Старый 06.04.2007, 20:10   #3
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Помогите убить баг...

Это не баг, это ошибка в логике алгоритма движения. Там я еще парочку таких заметил.

Если тебе начнут отлавиливать баги, кто тогда будет программистом? Один раз помочь несложно, но если такое случилось раз, то по ходу разработки подбные "баги" будут выскакивать постоянно. Нужно набраться опыта, а если будут писать за тебя, опыта не будет.

UPD:
Советую прокомментировать весь код. Вероятность помощи повысится на 60% процентов.
(Offline)
 
Старый 06.04.2007, 20:26   #4
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

1) это вообще первая моя просьба помочь исправить код на этом форуме!
2) другие ошибки, которые были до этого я исправлял сам!
3) про другие не исправленные ошибки я знаю. например то что Ball может вылазить за пределы уровня... но их я исправлять ведь не прошу! с ними я и сам разберусь... бывают моменты когда просто никак не понимаеш в чём собственно дело.. вот у меня такой момент сейчас... почему тогда в уровне "1" всё нормально, а в других в некоторых местах происходит эта фигня? я не знаю.. вот и прошу помочь!
(Offline)
 
Старый 06.04.2007, 20:39   #5
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Re: Помогите убить баг...

никто кроме тебя, твой код не поймет. имхо
(Offline)
 
Старый 06.04.2007, 20:47   #6
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

чего это? имхо оч даже понятный код
(Offline)
 
Старый 06.04.2007, 21:41   #7
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Помогите убить баг...

Понятный он будет с комментариями.
почему тогда в уровне "1" всё нормально, а в других в некоторых местах происходит эта фигня? я не знаю.. вот и прошу помочь!
Вроде очевидно, что в первом уровне некуда вылезть - там прямоугольник. В 3-м тоже.
Остальные же уровни предполагают проверку пути, по которому движется шарик. Если он собирается вылезть за поле, нужно это пресекать и заставить его двигаться другим путем (их всегда не меньше двух при перемещении между клетками по диагонали).
В 4-м уровне шарик двигается по прямой, игнорируя пределы поля.

Это не баг, это просто недописанный алгоритм передвижения.
(Offline)
 
Старый 06.04.2007, 23:29   #8
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

ну ведь у меня проверяется

1) координата MaxY,MinY \ MaxX, MinX в зависимости от типа движения (вверх, вниз, вправо, влево)
Например если вниз, то так:

For Tail = Each TypeTail
If Tail = First TypeTail Then MaxY = Tail\Ypos
If Tail\Xpos = Ball\Xpos And Tail\Ypos > MaxY Then MaxY = Tail\Ypos
Next

2) Если достигнут максимум\минимум, проверяются тайлы, которые находятся справа, слева \ вверху внизу. Если существует например только тайл, который находится справа и достигнут максимум по Y, то шарик перемещается вправо. Если и справа и слева есть тайлы то путь выбирается рандомно. Если ни справа ни слева нет тайлов - шарик никуда не двигается.

Вот например при движении вниз:

If Ball\Ypos < Ty Then
Ball\Ypos = Ball\Ypos + 1
For Sprite = Each TypeSprite
If Sprite\Ypos - Ball\Ypos = 24 And Sprite\Xpos = Ball\Xpos Then
For Tail = Each TypeTail
If Tail = First TypeTail Then MaxY = Tail\Ypos
If Tail\Xpos = Ball\Xpos And Tail\Ypos > MaxY Then MaxY = Tail\Ypos
Next
If MaxY => Ty + 25 Then
Sprite\Ty = Ty + 25
Else
Sprite\Ty = MaxY
If ST(Sprite\Xpos - 25,Sprite\Ypos) = True Then Tp = 0
If ST(Sprite\Xpos + 25,Sprite\Ypos) = True Then Tp = 1
If ST(Sprite\Xpos - 25,Sprite\Ypos) = False And ST(Sprite\Xpos + 25,Sprite\Ypos) = False Then Tp = 2
If ST(Sprite\Xpos - 25,Sprite\Ypos) = True And ST(Sprite\Xpos + 25,Sprite\Ypos) = True Then Tp = Rnd(1)

If Tp = 0 Then Sprite\Tx = Sprite\Xpos - 25
If Tp = 1 Then Sprite\Tx = Sprite\Xpos + 25
If Tp = 2 Then Sprite\Tx = Sprite\Xpos
End If
TypePath = 2
End If
Next
End If

А вот функция проверки существования тайла:

Function ST(Sx,Sy)
R = 0 : For Tail2 = Each TypeTail
If Tail2\Xpos = Sx And Tail2\Ypos = Sy Then R = R + 1
Next
If R > 0 Then : Return True : Else : Return False : End If
End Function

А вот так шарики двигаются:

For Sprite = Each TypeSprite
If TypePath = 1 Then
If Sprite\Xpos < Sprite\Tx Then Sprite\Xpos = Sprite\Xpos + 1
If Sprite\Xpos > Sprite\Tx Then Sprite\Xpos = Sprite\Xpos - 1

If Sprite\Xpos = Sprite\Tx Then
If Sprite\Ypos < Sprite\Ty Then Sprite\Ypos = Sprite\Ypos + 1
If Sprite\Ypos > Sprite\Ty Then Sprite\Ypos = Sprite\Ypos - 1
End If
End If
If TypePath = 2 Then
If Sprite\Ypos < Sprite\Ty Then Sprite\Ypos = Sprite\Ypos + 1
If Sprite\Ypos > Sprite\Ty Then Sprite\Ypos = Sprite\Ypos - 1

If Sprite\Ypos = Sprite\Ty Then
If Sprite\Xpos < Sprite\Tx Then Sprite\Xpos = Sprite\Xpos + 1
If Sprite\Xpos > Sprite\Tx Then Sprite\Xpos = Sprite\Xpos - 1
End If
End If
Next

Так где мой алгоритм недописан?
Обясните мне - непонятливому плиз!
(Offline)
 
Старый 06.04.2007, 23:47   #9
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

или блин не сикать координаты Max и Min, а просто поверерять тайлы не и по Х,и по Y ?

пример в аттаче. голубым - проверяемые тайлы
(Offline)
 
Старый 07.04.2007, 20:55   #10
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

кстать если просто не в состоянии помочь то лучьше помолчать! а если писать - то по существу!
(Offline)
 
Старый 07.04.2007, 22:07   #11
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Помогите убить баг...

Сообщение от Raiter
ну млять спасибо за помощЬ!
У тебя даже на суток терпения не хватило)

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам. Данил FAQ и уроки 30 19.06.2008 14:09


Часовой пояс GMT +4, время: 15:14.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com