Опять проблемы.
Код:
If KeyDown(200) Then меняется. |
Ответ: Опять проблемы.
Цитата:
a=1 и If KeyHit(200) And a=2 поэтому не вертица а вообще код какая то бессмысленица. опиши что у тебя должно происходить при нажатии на кнопки. |
Ответ: Опять проблемы.
Переменная "a" отвечает за то, можно ли сейчас вращать картинку. Я делаю TDS и мне надо сделать так, чтобы главный герой поворачивался в ту сторону, в которую идёт. То есть, при нажатии на кнопку вверх, он должен смотреть вверх и тп. Но если просто ставить, что при нажатии на кнопку вверх картинка вращается на 90 градусов, то при повторном нажатии он опять повернётся и будет идти вверх боком)
|
Ответ: Опять проблемы.
тогда что-то вроде этого.
Код:
hero1 = loadimage("hero.bmp") Цитата:
|
:super:
Еее, большое спасибо! |
Ответ: Опять проблемы.
|
Ответ: Опять проблемы.
Код:
Function UpdateStones() мыши на камень десять раз, он разрушался. Как-раз тут и начались проблемы. Если отслеживать переменную "shp" которая отвечает за "жизни" камней, то она будет отниматься, но не должным образом. Она отнимается то ли с каким-то шансом, то ли в какое-то время. В общем мне нужна ваша помощь в двух вещах: 1). Помогите найти ошибку. 2). Допустим, всё-таки я уничтожу этот камень функцией FreeImage. Но когда цикл начнётся заново, то на функции DrawImage он остановится, из-за того, что данного изображения больше не существует:) Так что пожалуйста, помогите и с этой проблемой. |
Ответ: Опять проблемы.
Типы решат все твои проблемы.
Вечером, время будет, напишу код. |
Ответ: Опять проблемы.
Я и не тороплю с ответом.
|
Ответ: Опять проблемы.
Код:
Global cursor Когда мы перебираем тип, это как цикл. Только цикл фиксирован, допустим от 0 до 20. А перебор типа перебирает все элементы. По ходу действия программы можно удалять или добавлять элементы, это не вызовет ошибки. Как-то так:) |
Ответ: Опять проблемы.
Зачем для каждого камня загружать картинку в память, если все камни одинаковые? Нужна всего 1 картинка.
|
Ответ: Опять проблемы.
Код:
Global stone = LoadImage("h.bmp"); камень |
Ответ: Опять проблемы.
Цитата:
П. С. Так конечно и cursor можно сделать не глобально:) |
Ответ: Опять проблемы.
Большое спасибо. А есть способ как-нибудь по другому сделать коллизию?
|
Ответ: Опять проблемы.
Цитата:
Код:
Function UpdateStones() m<>Null Код:
For m.Main=Each Main ; перебираем тип Почему не так: s.Stones или Stone.StoneType Код:
Type StoneType |
Ответ: Опять проблемы.
Не связывался в B3D 2D-картинками.. Не знаю про скорости 2D-алгоритмов.
Я в delphi так делал: 1) у камня есть позиция x,y и высота,ширина. 2) потом можно проверить попала точка курсора (при клике) в позицию камня +-высота +-ширина: если (x_камня+ширина<x_курсора>x_камня-ширина) и (y_камня+высота<y_курсора>y_камня-высота) Так. Пишу быстро на словах. Код:
UpdateStones(); обновляем камни |
Ответ: Опять проблемы.
Не-не-не. Я не про то. Я про коллизию игрока с камнем:)
Если делать как я, то будет возможность проникновения игрока в камень, если зажать например клавишу вверх и вниз. А и ещё, на чистом дельфи сложно TDS в одиночку сделать? |
Ответ: Опять проблемы.
Цитата:
Для 2D - попробуй BlitzMAX. |
Ответ: Опять проблемы.
По-моему, пока здесь дело не в компиляторе, а в представление как это должно работать:) Но мне больше никаких идей в голову не идёт. Как я не пытался, игрок всё равно может проникать через камни:)
|
Ответ: Опять проблемы.
Так знает ли кто-нибудь как сделать камень действительно твёрдым, чтобы проходить в него не было возможности?
|
Ответ: Опять проблемы.
Так, я переделал немного перемещение игрока, но всё равно игрок может проникнуть в камни
Код:
If KeyDown(200) Then |
Ответ: Опять проблемы.
Делай в 3д.
Создаешь квад с текстурой камня, добавляешь ему коллизию и все гуд. |
Ответ: Опять проблемы.
Что-то как-то громоздко выглядит. Переменных много меняется.
Чисто теоретически: -жмутся кнопки - меняется вектор перемещения, растет скорость -не жмутся - скорость падает. Прежде чем сдвигать игрока в очередной раз, надо проверять место по новым координатам, если там камень, то сдвиг не делать, а обнулять скорость. Останется проблема "проскакивания" препятствий на слишком большой скорости из-за слишком больших скачков за шаг (на 10-20 пикселов например). Тогда можно не только проверять координаты следующего шага, а еще брать пару точек между старой и новой координатой. |
Ответ: Опять проблемы.
Можно ли подробнее о векторном перемещении?
И если делать в 3D как сделать так, чтобы создавалась иллюзия что игра двухмерная? |
Ответ: Опять проблемы.
Имею ввиду, что где-то в программе есть две переменные (или больше, по числу измерений пространства) типа deltax, deltay. В которых хранится сдвиг координат игрока на текущий шаг/кадр. И еще отдельно скорость speed#.
Потом, в момент сдвига координаты игрока суммируются с координатами сдвига: px# = px + deltax*speed# py# = py + deltay*speed# Расчет удобно производить в дробных числах, а для отрисовки графики потом откидывать дробную часть. Пример: Влево-вверх: deltax=-1; deltay=-1 Вправо-вверх: deltax=1; deltay=-1 Вниз: deltax=0; deltay=1 Ну и вариации, в зависимости от нужд. Можно тоже дробями сделать. |
Ответ: Опять проблемы.
Спасибо! А такое "предсказывание" следующего шага не сильно на производительность влиять будет?
|
Ответ: Опять проблемы.
Лишний if? Нет.
Собственно ничего сильно не меняется. Производительность сжирают громоздкие переборы и обработки сложных вычислений или больших объемов данных. Сильнее всего на производительность влияет необходимость перебирать каждый кадр все камни, для проверки на столкновение с каждым. Но от этого уже никуда не деться. (Да и камней вряд ли будет ОЧЕНЬ много. :)) Все трехмерные функции типа "коллизий" тоже этим занимаются. |
Ответ: Опять проблемы.
Хотя да, 20 камней уж точно потянет:)
Еще появился вопрос с редактором уровней. Есть ли какой-нибудь не громоздкий способ? По-моему это делается как-то с двухмерным массивом, но вряд ли это правильно:) |
Ответ: Опять проблемы.
Игры всякие бывают. Где-то удобнее строить по клеточкам. Там к месту массив.
Когда объекты не привязаны к клеткам, а игрок движется произвольно, то есть все объекты на уровне свободные и закреплены своими координатами, уровень удобно хранить в файле как список этих самых объектов, с координатами и углами поворота, если надо. Ну а в редакторе надо только мышью (чем угодно :)) расставить объекты на карте, и потом записать в файл. |
Ответ: Опять проблемы.
Спасибо.
И, надеюсь, последний вопрос:) Как расчитывается FPS? |
Ответ: Опять проблемы.
Давно дело было, не помню уже. Но вопрос на форуме популярный был.
Вот, например (измерение): http://forum.boolean.name/showthread.php?t=5 Еще (дельта-тайминг): http://forum.boolean.name/showthread.php?t=8549 Ну и еще можно поискать. |
Ответ: Опять проблемы.
Однако чет я притормаживаю :)
|
Ответ: Опять проблемы.
Сейчас прочитал те ссылки, и ужаснулся. На счет скорости игры. То есть на более мощном или наоборот слабом компьютере чем у меня, скоросто передвижения игрока везде будет разной?
|
Ответ: Опять проблемы.
Именно так. Чтобы фпс не зависел от машины, надо собственноручно отмерять каждый кадр (суть есть дельта-тайминг). :)
|
Ответ: Опять проблемы.
Как это?:) Я уже планировал как-нибудь ограничивать максимальный фпс:)
|
Ответ: Опять проблемы.
Дельта-тайминг же. Надо по этим словам поиск провести и почитать. Тут много всякого умного понаписано было. А я уже не помню.
|
Ответ: Опять проблемы.
Да, тут много всего. Хотя и стандартный таймер тоже работает:)
|
Ответ: Опять проблемы.
Код:
If KeyDown(200) Then Код:
If x#<0 Then x#=1280 |
Ответ: Опять проблемы.
Также создал систему коллизий, которая тоже не работает:(
Код:
For m.Main=Each Main P.S. О "m.main" можно прочитать на первой странице темы, где описывались функции создания и обновления камней. |
Ответ: Опять проблемы.
Код:
deltax#=0 |
Ответ: Опять проблемы.
Мда оптимизация у меня сильно хромает:) У меня 98 строчек и всё не работает, у тебя 28 строчек и всё работает:)
Но я не совсем понимаю работу с типами функцией Код:
For s.stone=Each stone Код:
For i=0 to imax |
Ответ: Опять проблемы.
Цикл For Each...Next перебирает последовательно все существующие экземпляры данного типа (у меня Main переименован в stone, для понятности)
То есть каждый шаг переменная s получает значение очередного экземпляра (вернее даже будет "ссылается", а не "получает"). |
Ответ: Опять проблемы.
Тогда как взаимодействовать не со всеми, а например с 3?
Код:
... |
Ответ: Опять проблемы.
Нет.
Вот тут подробно: http://help.boolean.name/commands/2d_commands/Type.htm |
Ответ: Опять проблемы.
То есть единственный способ это использовать after,before,first и last?
|
Ответ: Опять проблемы.
Выходит, что так.
|
Ответ: Опять проблемы.
Код:
Function UpdateStones() |
Ответ: Опять проблемы.
А ты уверен, что это происходит здесь? Вряд ли KeyDown(2) все время возвращает истину. Поищи по коду, "закоментируй" подозрительные инструкции и т.д.
|
Ответ: Опять проблемы.
Да, это здесь, я только здесь писал. На счёт KeyDown(2) да, не всегда истинна но это легко исправляется. Например:
Код:
Function UpdateStones() |
Ответ: Опять проблемы.
Зачем надо, чтобы всегда была истинна? Я просто предполагал причину появления камней.
Необходимо ведь, чтобы камень появился однократно? А если при создании камня, сделать m\life, например, 100? А KeyDown надо переделать на KeyHit. |
Ответ: Опять проблемы.
Да, как раз в этом и была проблема. Он то создавался, но сразу рушился т.к. m\life был равен нулю:) Тогда такой способ, видимо, очень хорош в создании редакторов уровней. И клеточек нету, и сохранять удобно.
|
Ответ: Опять проблемы.
Цитата:
Делал я dll-ку - внесение списка типов в массив. В проверки выводил список обратно: были цифры 1,2,3 и т.д. Значит брал я Entity из массива так Terrain.WorldMap=Object.WorldMap(GetHandle(Obj)) Получается: ТвойОбъект.ТвойТип=Object.ТвойТип(GetHandle(3)) выдаст объект под номером 3 Проверил: Код:
Terrain.WorldMap=Object.WorldMap(GetHandle(2)) Так, стоп! GetHandle() это моя личная функция (которой нет в B3D), для вывода из номера ячейки.. Ну если очень нужно, то выход будет - делать массив с Handle на объекты. |
Ответ: Опять проблемы.
Цитата:
Дай исходник, чтобы попробовать сделать по-своему.. Потом посмотрим на решения (но чтобы не брать готовое, а посмотреть как нужно было делать). |
Ответ: Опять проблемы.
Жанр - tds. Игра будет как Stranded 2, только вид сверху. Но строительство будет ближе к Minecraft'y, то есть квадратиками. Сейчас самое важное добавить в игру инвентарь. Исходники смогу дать только завтра. Ну, а камни для строительства или создания вещей.
|
Ответ: Опять проблемы.
Исходник и все файлы.
|
Ответ: Опять проблемы.
Код:
Function UpdateStones() П.с. вот чуть лучше по моим соображениям, если я правильно понял что ты от функции хочеш )) |
Ответ: Опять проблемы.
Цитата:
Код:
Global ClientsHandles[10] |
Ответ: Опять проблемы.
Про картинку. Как я понял, она вообще одна.
А в таком случае копировать ее в каждый экземпляр, да еще и загружать каждый раз из файла, абсолютно бессмысленно. Проще для рисования каждого камня обращаться к одной картинке, в виде глобальной переменной или параметра передаваемого в функцию обновления камней. |
Ответ: Опять проблемы.
Цитата:
Надо так Цитата:
|
Ответ: Опять проблемы.
|
Ответ: Опять проблемы.
Цитата:
П.с. Переделал ф-цию. |
Ответ: Опять проблемы.
|
Ответ: Опять проблемы.
а где кнопка спойлера? ее тут нет?
и да, как сделать рандомную генерацию ландшафта из кубов? и вообще чтобы все было из кубов? страшный спойлер |
Ответ: Опять проблемы.
На ютьюбе глянь, там есть цикл видео о создании Minecraft'a на блице. И вопрос не совсем соответствует теме.
|
Часовой пояс GMT +4, время: 09:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot