Помогите убить баг...
Вложений: 2
Короче делаю игру по типу лайнс... Про неё можна прочитать в теме "Играли бы вы в это?" в болтовне...
В аттаче лежит "редактор" и игра.. В игре управление мышой... (правой кнопкой добавить шарик) Вводить название левла без формата .rtr Баг заключается в сделующем. Когда мы толкаем шарики - они должны "скользить о бортики". Что это работает можна увидеть загрузив уровень "1". (Пока толкать можна только 1 шарик). Но если загрузить другие уровни. "2", "5" например, то можна заметить баг при толкании... Шарик не скользит, а выходит за пределы уровня... (это только в некоторых местах уровня)... Короче сами увидите... помогите убить баг ... я никак не могу понять откуда он взялся... :SOS: + если кому нада. управление в редакторе: Создать новый тайл - N Сохранить уровень - S Выход - Q Выделить - левая кнопка мыши Снять выдиление - правая или пробел перемещать кнопками управления курсора :) сначала вводим название уровня. потом идет проверка. если такой уровень есть - нажимаем 1 что бы открыть. потом нужно нажать любую кнопку... |
Re: Помогите убить баг...
up
только ща заметил что архив не приаттачил! оказываеццо что моих файлов на форуме ужо на 31 мб :( пришлось усё нах снести... да ишо! если вы уже скачали то там наверняка при компиляции вылетит ошибка... в том месте просто нужно заменить Tail2 на Tail... случайно поставил 2.. и только что заметил... архив ща поправлю |
Re: Помогите убить баг...
Это не баг, это ошибка в логике алгоритма движения. Там я еще парочку таких заметил.
Если тебе начнут отлавиливать баги, кто тогда будет программистом? Один раз помочь несложно, но если такое случилось раз, то по ходу разработки подбные "баги" будут выскакивать постоянно. Нужно набраться опыта, а если будут писать за тебя, опыта не будет. UPD: Советую прокомментировать весь код. Вероятность помощи повысится на 60% процентов. |
Re: Помогите убить баг...
1) это вообще первая моя просьба помочь исправить код на этом форуме!
2) другие ошибки, которые были до этого я исправлял сам! 3) про другие не исправленные ошибки я знаю. например то что Ball может вылазить за пределы уровня... но их я исправлять ведь не прошу! с ними я и сам разберусь... бывают моменты когда просто никак не понимаеш в чём собственно дело.. вот у меня такой момент сейчас... почему тогда в уровне "1" всё нормально, а в других в некоторых местах происходит эта фигня? я не знаю.. вот и прошу помочь! |
Re: Помогите убить баг...
никто кроме тебя, твой код не поймет. имхо
|
Re: Помогите убить баг...
чего это? имхо оч даже понятный код :)
|
Re: Помогите убить баг...
Понятный он будет с комментариями.
Цитата:
Остальные же уровни предполагают проверку пути, по которому движется шарик. Если он собирается вылезть за поле, нужно это пресекать и заставить его двигаться другим путем (их всегда не меньше двух при перемещении между клетками по диагонали). В 4-м уровне шарик двигается по прямой, игнорируя пределы поля. Это не баг, это просто недописанный алгоритм передвижения. |
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 Так где мой алгоритм недописан? :dontknow: Обясните мне - непонятливому плиз! :wallbash: |
Re: Помогите убить баг...
Вложений: 2
или блин не сикать координаты Max и Min, а просто поверерять тайлы не и по Х,и по Y ?
пример в аттаче. голубым - проверяемые тайлы |
Re: Помогите убить баг...
кстать если просто не в состоянии помочь то лучьше помолчать! а если писать - то по существу!
|
Re: Помогите убить баг...
Цитата:
Думаю, если автор позволяет себе разводить такой оффтоп в собственной же теме, она его больше не интересует. |
Часовой пояс GMT +4, время: 18:41. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot