Воскресенье, 05 Апреля 2026, 17:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
YellowAfterlifeДата: Понедельник, 23 Марта 2015, 03:03 | Сообщение # 81 | Тема: BasiEgaXorz - какой в нём Бейсик используется?
Сейчас нет на сайте
А какой ЯП знаете?
Есть еще компилятор C (на самом деле даже не один) для Sega.

Синтаксис в BEX более-менее стандартный BASIC-овский, с обычными для компиляции под микроконтроллеры ограничениями (никаких классов, статичные переменные). Существует страница с списком всех операторов и функций (осторожно: вырвиглазые цвета).
На GCUP'овской странице о программе есть ссылка на форум программы, где есть некоторое количество примеров кода.

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




Сообщение отредактировал YellowAfterlife - Понедельник, 23 Марта 2015, 03:04
YellowAfterlifeДата: Понедельник, 23 Марта 2015, 03:12 | Сообщение # 82 | Тема: настольная серия D20 и D&D
Сейчас нет на сайте
Цитата Linka ()
Как, через Скайп смотреть? Тогда уж лучше вариацию для ПК какую-нибудь найти, наверное.

Есть еще, к примеру, Tabletop Simulator, в который можно импортировать карточки/модели объектов/прочее для сборки виртуального варианта интересующей настольной игры и последующей игры в нее по сети. Люди занимательные вещи с ним делают.


YellowAfterlifeДата: Понедельник, 23 Марта 2015, 20:33 | Сообщение # 83 | Тема: Construct 3 – каким он будет?
Сейчас нет на сайте
Цитата IvanKorobko ()
Зато конечным пользователям глубоко по барабану со скриптингом была сделана игра или без...

Вон к примеру от Ketchapp 2 игрушки в топах мобильных повисли: Bounce и Phases, так они вообще на Buildbox сделаны, где всё основано исключительно на пресетах встроенных...

Какое отношение имеет данное утверждение к проходящему здесь обсуждению?

Игроку действительно все равно, где и как была сделана игра. Если она, конечно, была сделана, и разработчик не сдался после многодневных танцев с бубном.

Но в интересах разработчика не выбирать инструмент, разработка на котором в какой-то момент может застопорится из-за того что какой-то функционал игры сделать не получается, и выбор стоит между поиском специалистов по совокуплениям с SDK/API инструмента (которых зачастую днем с огнем не сыщешь) и переносом игры на другой движок (что порой означает отсрочку выхода игры на месяца со всеми выходящими последствиями).

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

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


YellowAfterlifeДата: Понедельник, 23 Марта 2015, 21:02 | Сообщение # 84 | Тема: Изменение размера спрайта
Сейчас нет на сайте
Цитата XDominator ()
Уверен, что collision_line это тот же collision_point, просто уже загнанный в цикл, а значит что фактически при таком подходе код не ускорится, а замедлится до 2х раз при максимально возможном расстоянии, т.к. это самое расстояние будет прокручиваться 2 раза вместо 1-го. Хотя без замеров времени выполнения line и point не буду утверждать это на 100%

collision_line это не collision_point в цикле. Будь это так, разве не должно было бы время выполнения функции расти с увеличением расстояния между точками, в конечном счете вызывая сбои в работе игры из-за превышения допустимых норм? Но этого не происходит. collision_line требует одинакового времени выполнения вне зависимости от того, является ли длина отрезка 100 пикселей, или 100 миллионов пикселей.
Стандартные принципы реализации такой функции подразумевают следующее:
Цитата
Для каждого экземпляра подходящего вида:
Если bounding box экземпляра пересекает прямоугольник, в который вписана линия (4 числовых проверки):
Если bounding box экземпляра пересекает линию (более затратно):
Если флаг precise == false, у экземпляра не "точная" маска столкновений, или линия пересекает пиксельную маску (наиболее затратно):
Прервать цикл, вернуть ID экземпляра

Последняя строка так же имеет отдельное значение - экземпляры перебираются по мере их создания, что подразумевает значительно сниженное время выполнения проверки если функция наткнулась на пересекающий экземпляр в начале списка.


YellowAfterlifeДата: Вторник, 24 Марта 2015, 03:07 | Сообщение # 85 | Тема: iGUI
Сейчас нет на сайте
CheckboxGroup.selectedIndex указывает на номер выбранного пункта (первый пункт имеет индекс 0, второй 1, и так далее); содержит -1 если ни один пункт не выбран.
Если включена возможность выбора нескольких элементов за раз, selectedIndexes (ниже на той же странице документации) содержит их список.


YellowAfterlifeДата: Среда, 25 Марта 2015, 15:06 | Сообщение # 86 | Тема: Селектор карт. (Что-то не так).
Сейчас нет на сайте
Цитата valeranagato ()
room_goto=(room3)

А что тут делает "="? GameMaker: Studio такой бы код и скомпилировать не дал бы.
Можно перестроить как
Код
{
     with (info)  
     {  
         global.persona=1  
     }  
     with (info2) {
         if (global.roome=2) room_goto(room3)
         if (global.roome=1) room_goto(room1)
     }
}


YellowAfterlifeДата: Среда, 25 Марта 2015, 20:37 | Сообщение # 87 | Тема: Вопрос - Ответ (Game Maker)
Сейчас нет на сайте
Цитата Banan4ik ()
Бьюсь с этими таймлайнами, как сделать чтобы каждую секунду срабатывало событие. Я так понимаю, одна секунда - это 30 кадров (по стандарту).
Это делается через таймлайн, таймер или все проще?

Для такого используют alarm'ы. Timelines больше рассчитаны на серии событий, что происходят один раз. Можно, конечно, "зациклить" timeline кодом, но при одном действии это лишь лишние хлопоты.
Цитата

Information about object: obj_example

Create Event:
Код
alarm[0] = 30 // время до первого срабатывания


Alarm 0:
Код
// [выполнить действия]
alarm[0] = 30 // время до следующего срабатывания



YellowAfterlifeДата: Среда, 25 Марта 2015, 21:42 | Сообщение # 88 | Тема: Ввод текста в GMS
Сейчас нет на сайте
А в чем подвох и для каких платформ?
Если для ПК то я делал пример.
Если iOS/Android то покупайте какое-нибудь расширение для аппаратной клавиатуры.


YellowAfterlifeДата: Среда, 25 Марта 2015, 22:14 | Сообщение # 89 | Тема: Ввод текста в GMS
Сейчас нет на сайте
Цитата Randall ()
Большое спасибо, этот видел, много лишнего правда там, но порою. Крупное окно и многострочность не нужна.
Мне просто нужно вводить до ста, скажем, знаков в одной строке.

В примере нет многострочности, это просто демонстрация варианта вывода вводимых значений.
Если нужно ограничивать длину то можно просто делать
Код
if (string_length(keyboard_string) > 100) {
     keyboard_string = string_copy(keyboard_string, 1, 100)
}
if (keyboard_check_pressed(vk_enter) && keyboard_string != "") {
     var ins = keyboard_string;
     // сделать что-то с введенной строкой (ins)
     keyboard_string = ""
}
И рисовать значение keyboard_string через draw_text.
Пример добавляет над этим надстройку для возможности копирования, вставки, и перемещения курсора по тексту (чего keyboard_string изначально не предусматривает).


YellowAfterlifeДата: Четверг, 26 Марта 2015, 10:05 | Сообщение # 90 | Тема: Программа для создания модов
Сейчас нет на сайте
"Универсальных" программ для создания модов не бывает, поскольку принципы и технологии создания игр значительно отличаются, и особой стандартизации не подлежат.
А что мешает поискать приложения для моддинга SimCity 5 в отдельности? Небольшой поиск выдал SimCityPak, что позволяет просматривать и редактировать файлы игры.
... а еще можно рассмотреть возможность перехода на Cities: Skylines, в котором есть поддержка моддинга "из коробки", и созданные работы можно загружать в Steam Workshop.


YellowAfterlifeДата: Четверг, 26 Марта 2015, 10:11 | Сообщение # 91 | Тема: Массив в мультиплеере
Сейчас нет на сайте
С Unity RPC все довольно странно. Вызывает подозрения, что им занимались те же люди, что сделали встроенный API для геймпадов.

Есть несколько вариантов:
1. Запаковать массив более плотно, преобразовав его в буфер, и после вызвав Convert.ToBase64. Это подразумевает 4 байта base64 на каждые 3 байта буфера с массивом, что обычно вполне приемлемо. Тут есть пример кода.
2. Воспользоваться незадокументированным фактом того, что по RPC кроме описанных в документации типов можно еще отправлять массив байт (byte[]). Полагаю, преобразование массива int в массив byte и обратно не требует дополнительных пояснений. Данный трюк используется тут чтобы отправить/принять сериализированный класс.


YellowAfterlifeДата: Четверг, 26 Марта 2015, 10:41 | Сообщение # 92 | Тема: Вопрос - Ответ (Game Maker)
Сейчас нет на сайте
Цитата Banan4ik ()
ООО, спасибо! Все работает!
Пользуясь случаем, ты же автор Terrasavr, или я что-то путаю?
Верно.
Занимаюсь различным времяпрепровождением, в общем-то говоря.


YellowAfterlifeДата: Пятница, 27 Марта 2015, 02:01 | Сообщение # 93 | Тема: Анимация.
Сейчас нет на сайте

GMK
spin_pos это смещение (в "строках")
spin_speed это скорость вращения (опять таки в "строках")
Пример включает прокрутку текста и прокрутку фона, поскольку я не совсем уверен о том, что из двух является желаемым эффектом.
Полагаю, сделать замедление или прочий нужный эффект не составит большого труда.


YellowAfterlifeДата: Пятница, 27 Марта 2015, 03:33 | Сообщение # 94 | Тема: Бегущая строка и ее обновление
Сейчас нет на сайте
GMK
Create:
Код
keyboard_string = "Type something..."
runline_text = keyboard_string
runline_pos = 0 // offset (in pixels)
runline_space = 30 // space after the end of text

Step:
Код
runline_text = keyboard_string
runline_pos += 4

Draw:
Код
draw_set_font(fnt_runline)
var p, w, i, dw;
w = string_width(runline_text) + runline_space
if (w > 0) {
     p = runline_pos
     p = (p mod w) + (p < 0) * w
     dw = room_width // output width
     i = max(2, ceil(dw / w))
     while (i >= 0) {
         draw_text(i * w - p, 50, runline_text)
         i -= 1
     }
}


YellowAfterlifeДата: Пятница, 27 Марта 2015, 15:59 | Сообщение # 95 | Тема: При нажатии действие.
Сейчас нет на сайте
В качестве нехитрого способа, можно добавить в активацию проверку того, что объект видимый, вместо непосредственной активации создавать "активированный объект" и скрывать основной, и через нужное количество секунд (с помощью alarm) делать его вновь видимым.

YellowAfterlifeДата: Пятница, 27 Марта 2015, 22:53 | Сообщение # 96 | Тема: Время вылета пути!
Сейчас нет на сайте
Вариант без alarm'ов:
Цитата

Information about object: obj_player
Sprite: <no sprite>
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>
Create Event:
set variable cooldown to 0

Step Event:
set variable cooldown relative to -1

Mouse Event for Glob Left Button:
if cooldown is smaller than 1
. . start of a block
. . set variable cooldown to 10
. . create instance of object obj_bullet at relative position (0,0) with speed 4 in direction point_direction(x, y, mouse_x, mouse_y)
. . end of a block
"cooldown" используется как таймер до возможности следующего выстрела.


YellowAfterlifeДата: Суббота, 28 Марта 2015, 15:50 | Сообщение # 97 | Тема: Можно ли gamemaker создавать переменные сам?
Сейчас нет на сайте
Если нужен список значений, использовать вышеупомянутые массивы.
Еще про массивы:

  • Достаточно присвоить значение в "последнюю" ячейку - остальные будут заполнены нулями,
    array[99] = 0 // array[0..99] автоматически будут установлены в 0 при выделении памяти
  • Есть двухмерные массивы (см. справку)
  • Если используете GameMaker: Studio, можно даже записывать один массив в другой массив.

Если нужен список соответствий (например, слов и выдаваемых за них очков), логичнее взять ds_map.


YellowAfterlifeДата: Суббота, 28 Марта 2015, 16:29 | Сообщение # 98 | Тема: Можно ли gamemaker создавать переменные сам?
Сейчас нет на сайте
Цитата EfimovMax ()
Это где ты такое вычитал? GM не создаёт автоматом предыдущие индексы массива. Код array[99] = 0 создаст только один элемент массива с индексом 99 и значением 0.
Пользуйтесь только достоверными источниками

В GameMaker не бывает "дыр" в массивах. Если запись происходит за границу массива, массив расширяется (происходит пере-выделение памяти под него) и все "новые" ячейки обнуляются,
arr[9] = 1
for (var i = 0; i < 10; i += 1) {
show_message("arr[" + string(i) + "] -> " + string(arr[i]))
}

отобразит серию 0 и 1 в конце, без ошибок.

Что смешно, в предоставленной ссылке на документацию описывается эта же концепция (поиск по фразе "You will notice that the array has been initialised backwards"), и все примеры кода в документации инициализируют массивы задом наперед, поскольку
for (var i = 0; i < 100; i += 1) arr[i] = 0
Уничтожит и выделит массив заново 100 раз. И время выполнения растет с каждой новой итерацией, поскольку памяти выделять и освобождать нужно все больше и больше.

Ну и раз уж мы заговорили о критике кода, хотелось бы заметить, что инициализировать массив значениями "noone" - сомнительная идея, потому что noone это просто спец. константа, равная -4.


YellowAfterlifeДата: Суббота, 28 Марта 2015, 16:48 | Сообщение # 99 | Тема: Можно ли gamemaker создавать переменные сам?
Сейчас нет на сайте
Цитата EfimovMax ()

Код
Array[999]='Ты не прав'

if Array[998]='Сам проверь' game_end()

Сравнение строкового значения с числом выдает ошибку. Ты читал текст ошибки? В GMS оно даже отчетливо говорит "Invalid comparison type" (неправильный тип сравнений).
Можно с таким же успехом написать "if 0='Сам проверь' { }" и говорить, что в GameMaker не работают сравнения.


Array[999] = ''
if (Array[998] == 0) {
show_message("What are you doing with your life.")
}




Сообщение отредактировал YellowAfterlife - Суббота, 28 Марта 2015, 16:49
YellowAfterlifeДата: Воскресенье, 29 Марта 2015, 02:02 | Сообщение # 100 | Тема: id объекта при клике мыши на него
Сейчас нет на сайте
instance_place, instance_position, и все collision_ функции возвращают ID найденного экземпляра.
Следовательно, можно проделывать следующим образом в шаге юнита:
if (selected && mouse_check_button_pressed(mb_left)) { // если текущий юнит выбран и мышь нажата
    target = collision_point(mouse_x, mouse_y, obj_enemy, false, true)
    if (target) { /* найден враг, можно атаковать */ }
}


Цитата EfimovMax ()
objTest.id возвратит идентификатор объекта.

Утверждение верно, но obj_name.id возвратит id первого экземпляра объекта, а не какого-то отдельно взятого [на который нажали мышью].




Сообщение отредактировал YellowAfterlife - Воскресенье, 29 Марта 2015, 04:04
Поиск:

Все права сохранены. GcUp.ru © 2008-2026 3d engine Рейтинг