Понедельник, 21 Июля 2025, 10:36

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
Nick_RimerДата: Среда, 04 Февраля 2015, 14:50 | Сообщение # 141 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
rda21, с трудом понял вопрос, но кажется ответ примерно такой:
да, всё, что касалось layout'а обновляется, потому что заново загруженный layout наверняка не имел никаких сохранённых состояний.
Однако же есть ещё вариант, когда используются глобальные объекты, они создаются сразу при старте игры и должны работать до момента, пока ты не закроешь приложение, состояние таких объектов должно поддерживаться при переходе между сценами.
Если требуется запоминать какие-то значения на длительный период времени, даже на выключение игры, неплохо бы их куда-нибудь писать, а в нужный момент откуда-нибудь читать и делать определённое сравнение.
Допустим же, что ты закрываешь игру, перед этим сохранилось текущее время в какой-нибудь файлик. Предположим, до респа оставалось ждать минут 56.
Мы открыли игру снова через некоторое время, через полчаса, при загрузке сцены должен произойти расчёт, сколько прошло времени с момента выключения, после чего произвести вычитание, чтобы таймер сменил значение на осталось 26 минут.
Как-то так


- Доброе утро, Агент Пи!
Nick_RimerДата: Среда, 04 Февраля 2015, 14:30 | Сообщение # 142 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
tduk, блин, сто лет назад я кому-то делал исходник, где спрайт перемещался по клеточкам свободно, не проникая в препятствия, и было это на куче "ифов" и рандомов.. ну может ещё grid movement был прикручен, но не факт.
Скажем так, противник не привязан к тому, чтобы находить игрока и искать ближайший путь к нему, поэтому перемещаться может рандомно во все стороны.
В том примере спрайт двигался максимум на одну клетку за ход с небольшой паузой, выбирая каждый раз после остановки направление (верх, низ, лево право) при помощи рандома random(4) (например, 0 - вверх, 1 - вправо, 2 - вниз, 3 - влево). Делалась проверка при помощи overlapping, есть ли в клетке, которую мы выбрали, стена, ведь тогда мы не имеем право туда двигаться. Если стена не обнаруживалась, то совершалось движение на 1 клетку в выбранном направлении, напротив же происходил перевыбор стороны.

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

Но идею я подкинул, можешь поразмышлять.. решение всех прочих вопросов я тогда оставил на долю человека, для которого строгал пример. Это не истина в последней инстанции, но даже такая деревянная имеет право жить smile
ты же дал слишком мало информации о характере видимого тебе движения, чтобы рассуждать на это в другом ключе..


- Доброе утро, Агент Пи!
Nick_RimerДата: Четверг, 22 Января 2015, 08:16 | Сообщение # 143 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
rda21, вот тебе исходник, посмотри, может на что-то натолкнёт.
СКАЧАТЬ
Исходник для версии Construct Classic r2
Срок хранения файла 30 дней


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Четверг, 22 Января 2015, 08:16
Nick_RimerДата: Среда, 21 Января 2015, 19:49 | Сообщение # 144 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
rda21, автоматически? или при управлении с клавиатуры? стрелять в каком виде и по какой команде?
если для пуль использовать поведение bullet, то указывай угол, в котором происходит выстрел.
констракт какой? 2 или классик?

hotspot - это, как я помню, точка, которая будет считаться для спрайта основной
если ты производишь вращение спрайта, он будет вращаться вокруг этой точки, если ты задаёшь положение спрайту по X и Y, именно эта точка встанет по указанным координатам.
вроде всё так..


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Среда, 21 Января 2015, 20:00
Nick_RimerДата: Понедельник, 19 Января 2015, 17:35 | Сообщение # 145 | Тема: Тени
заслуженный участник
Сейчас нет на сайте
Если один объект должен быть жёстко привязан к другому, в констракте ещё со времён классика есть такой метод, как Always -> Position to another object
Надеюсь, я не соврал с названиями, как-то так всё это там называется. Координаты ведомого объекта постоянно привязываются к координатам ведущего. Если объект на нижнем слое прикрепить к объекту на верхнем слое, а при этом он ещё будет и меньше по размерам, то его гарантированно не будет видно. Не это ли цель? Кстати, не обязательно совать их на разные слои. Можно один из объектов расположить ближе или дальше в пределах одного слоя (если это удовлетворяет условиям задачи, конечно)
Если я верно помню, и в С2 можно совершить такой же манёвр.

Такая техника применяется в первом уроке «платформер за пять минут», полезно вспомнить.
Если нужно что-то другое, очевидно, я не понял поставленной проблемы.



- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Понедельник, 19 Января 2015, 20:16
Nick_RimerДата: Пятница, 26 Декабря 2014, 12:20 | Сообщение # 146 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Vicka, сам по себе формат json удобен, и мне нравится.
Вот только гораздо удобнее в констракте его читать, чем его заполнять smile
Это вечный вопрос, как бы это сделать поудобнее да покрасивее..


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Пятница, 26 Декабря 2014, 12:20
Nick_RimerДата: Четверг, 25 Декабря 2014, 23:12 | Сообщение # 147 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Vicka, решение вопроса сохранения и загрузки данных зависит от платформы, под которую ты делаешь игру.. я с этим не так давно мучился, когда начал делать свой проект, где загружать и сохранять файлы - очень важно, всё на этом построено.
Т.к. я пока делаю версию проги под винду, то и использую соответственно NodeWebkit.

Чтобы получить от него путь в папку, где лежит наш .exe, нужно добавить в проект собсно плагин NodeWebkit, а затем Array -> Load -> NodeWebkit.AppFolder & "data.json"
Если надо заставлять пользователя выбирать файл, можно воспользоваться стандартными виндосовскими окнами выбора файла, для этого в NodeWebkit есть такие средства, как Show save dialog, Show open dialog и т.п.
Тогда выбранный файл/папку можно попросить через запрос NodeWebkit.ChosenPath

Я пока не знаю, как обстоит дело с другими платформами. Возможно, что не так радужно. Предлагаю пробовать смотреть в соответствующие плагины..
Надеюсь, что помог!

P.S. И чуть не забыл важную вещь! Вся эта хрень не будет работать в предпросмотре. Т.е., для того, чтобы протестить проект, придётся каждый раз его экспортировать и запускать екзешник с диска. По крайней мере диалоги точно не работают, проверено.


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Четверг, 25 Декабря 2014, 23:16
Nick_RimerДата: Среда, 24 Декабря 2014, 23:15 | Сообщение # 148 | Тема: Спрайты.
заслуженный участник
Сейчас нет на сайте
wik, я сам тут последнее время бываю не так часто, однако же всё равно я давно не наблюдал здесь модератора, и чтобы он что-то правил тут.

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

На форуме есть графический раздел, где пишут всякого рода художники и моделлеры (например, основная ветка тут - СЦЫЛКО). По моему скромному мнению место этой теме всё же именно там, т.к. просто человек, не работающий на констракте, но страстно желающий получить два-дэшный танчик, скорее всего эту тему просто не найдёт..

А так ваще клёво.. можно сделать настоящий GTA 2.5 happy


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Среда, 24 Декабря 2014, 23:30
Nick_RimerДата: Среда, 24 Декабря 2014, 23:03 | Сообщение # 149 | Тема: Ограничение числа в определенном промежутке?
заслуженный участник
Сейчас нет на сайте
AntiAlianKiller, может быть буду несколько кэпом, однако не всегда random(x) возвращает целое x. Точнее, не "не всегда", а "не везде". Конкретно - в С2.
В СС - да! Чётко целое, как ты и написал:
Цитата
Можно было бы писать сразу random(101).


А вот в С2 - хрен там! Сначала делается рандомная целая часть числа, а затем на фигову тучу знаков после запятой - рандомная вещественая часть числа. Так то! Я первый раз чуть не охренел, почему у меня ничего не работает без округлений в С2.
А почему нужно пользоваться именно floor(x) - не хочу писать здесь больше, чем уже когда-то писал ВОТ ТУТ.

В общем, конечно, если ты делаешь игру на СС, то ты прав, можно без флора. Если С2 и нужно целое число - с флором.
В любом случае я сломал мозг, глядя на твою формулу biggrin


- Доброе утро, Агент Пи!
Nick_RimerДата: Среда, 24 Декабря 2014, 18:26 | Сообщение # 150 | Тема: Спрайты.
заслуженный участник
Сейчас нет на сайте
Всё здорово! Только, как мне кажется, не в этой теме. Как это относится к констракту? dry

- Доброе утро, Агент Пи!
Nick_RimerДата: Понедельник, 22 Декабря 2014, 21:43 | Сообщение # 151 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
stalker_zona, по идее С2 сам должен выдать тебе ссылку, по которой требуется скачать и установить так называемый Node Webkit for Construct 2.
Если что, скачать можно вот здесь, с официального сайта scirra.com: ССЫЛКА


- Доброе утро, Агент Пи!
Nick_RimerДата: Понедельник, 22 Декабря 2014, 21:40 | Сообщение # 152 | Тема: Ограничение числа в определенном промежутке?
заслуженный участник
Сейчас нет на сайте
AntiAlianKiller, я не совсем понимаю суть ограничения таким способом, можешь пояснить СМЫСЛ этой операции? (Принцип работы функции объяснять не надо, знаю, что такое clamping). Но почему, например, не устраивает конструкция floor(random(101)). Тоже ведь от 0 до 100. Не больше и не меньше.

- Доброе утро, Агент Пи!
Nick_RimerДата: Четверг, 18 Декабря 2014, 22:45 | Сообщение # 153 | Тема: Генерация
заслуженный участник
Сейчас нет на сайте
Ramilyanamana,
Цитата
с global number вроде разобрался. а вот, что такое local number? нигде не могу найти

Всё просто. Конкретно эти два понятия в таком виде используются в С2.
Global number - это глобальная переменная, содержащая число.
Local number - локальная переменная, содержащая число.
В С2 строго определяется, содержит переменная число или же строку. Кажется, переменная ещё там может быть булева, но не хочу щас в этом моменте гнать, а открыть прогу и посмотреть - лень..

В С2 нет отдельного списка переменных, как это было в классике. Переменные и константы объявляются и находятся там же, где ты указываешь все события.
Отличие глобальных от локальных состоит в том, что глобальные действуют на весь Layout, к которому идёт этот список событий. К тому же глобальные всегда привязаны к вершине списка, т.е. объявляются раньше всех событий.
Локальные - только на событие, в которое оно вложено, и все его подсобытия. Строка с локальной переменной появляется в том месте, где она объявлена. Такого понятия в СС, как локальная переменная, не было, насколько мне известно.

В общем, и то, и другое в СС можешь заменять обычными глобальными переменными.

Вроде понятно объяснил, да?


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Четверг, 18 Декабря 2014, 22:48
Nick_RimerДата: Вторник, 16 Декабря 2014, 22:35 | Сообщение # 154 | Тема: Примеры, исходники
заслуженный участник
Сейчас нет на сайте
stalker_zona, для общих вопросов по констракту есть вообще-то СПЕЦИАЛЬНАЯ ТЕМА; но я так и быть отвечу тебе здесь, раз уж вопрос прозвучал.

Файлы .cap открываются в редакторе Scirra Construct Classic.
При этом, ВНИМАНИЕ, файлы, сделанные в более поздней версии редактора , не будут открываться в более ранней версии программы.
Т.к. классик больше не развивается, люди в основном сидят на последних двух релизах: СС r1.2 и CC r2 (последний ни в коем случае не путать с редактором Scirra Construct 2!!!)
Нужную версию можно взять тут: ссылка (ничто не мешает иметь на компе обе)

На всякий случай: файлы .capx - это проекты редактора Scirra Construct 2. Они вообще не открываются ни одним классиком. Только в С2.
Удачи.

И следующий вопрос задавай там, где положено! deal
В этой теме люди выкладывают примеры исходники (в теме ветки так и написано). Хоть и изредка.


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Вторник, 16 Декабря 2014, 22:37
Nick_RimerДата: Понедельник, 01 Декабря 2014, 20:39 | Сообщение # 155 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Serega-A,
Допустим, ты хранишь где-то бестскор. В INI. Или в массиве. Ваще не важно.
Запустили игру. Пытаемся прочитать из места сохранения, если там ничего, допустим, то считаем BestScore = 0.
Или же прочитали, тогда BestScore = считанное значение
Далее играем. Фигак - проиграли, геймовер, дошли до финала. Если CurrentScore > BestScore, то BestScore = CurrentScore.
Сохраняем бестскор в файл сохранения.
Ну как-то так smile
BestScore и CurrentScore - глобальные переменные. Первая - лучший результат, а, соответственно, вторая - текущий, который сейчас в игре зарабатываем.


- Доброе утро, Агент Пи!
Nick_RimerДата: Понедельник, 17 Ноября 2014, 19:55 | Сообщение # 156 | Тема: Нарды
заслуженный участник
Сейчас нет на сайте
makso134, механику каждый придумывает свою, давай творческий подход к делу!

А на затравку:
попробуй сделать массив из 20 значений, каждое означает ячейку поля.
Число в ячейке - количество фишек на ней. Неплохо бы задать доп. поле (например, ещё один ряд из 20 значений; итого двумерный массив 2х20), которое бы обозначало - black (занято чёрными), white (занято белыми), none (свободное поле).
А дальше пошло-поехало. Кости - два рандомных генератора от 1 до 6. Математику сам пишешь. Если выбрал какую-то фишку, легко вычислить по номеру её ячейки, доступны ли для неё ходы, выпавшие на костях. И т.д. Не забываем про "дубль".

P.S. Вот заставить ИИ адекватно играть против тебе гораааааздо труднее. Это вообще самое трудное здесь. Всё остальное с точки зрения механики и математики (даже графики) - пара пустяков. Напиши для начала клиент для игры ПвП.
P.P.S. Очень люблю длинные нарды smile


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Понедельник, 17 Ноября 2014, 19:55
Nick_RimerДата: Четверг, 13 Ноября 2014, 21:43 | Сообщение # 157 | Тема: графики на 5 мб - игра 45 мб. как?
заслуженный участник
Сейчас нет на сайте
AndrewVersus,
год назад я сам задавал этот вопрос здесь, можешь сам почитать, что люди пишут.


- Доброе утро, Агент Пи!
Nick_RimerДата: Понедельник, 10 Ноября 2014, 20:39 | Сообщение # 158 | Тема: Движущие платформы
заслуженный участник
Сейчас нет на сайте
frorns, каждый раз, когда я схожу с движущегося эскалатора в метро, я как бы подпрыгиваю, т.к. не хочу, чтобы мой ботинок зажевало, как это исправить? smile
короче, ты людЯм хоть пример-то покажи, а то так можно долго гадать!

P.S. я знаю что такое Sine, сам людям рекомендовал его для платформ. Но посмотреть на конкретный случай надо.


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Понедельник, 10 Ноября 2014, 20:40
Nick_RimerДата: Понедельник, 20 Октября 2014, 10:42 | Сообщение # 159 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem, а использование именно версии r1.2 обязательно?
Со своей стороны могу порекомендовать перейти на уже давно существующую и последнюю версию классика - r2.
Найти и взять можно ТУТ.

Что касается практической реализации.. вот тебе пример:
СКАЧАТЬ для версии r1.2
Срок хранения файла: 30 дней

Программа умеет создавать массив по значениям, которые ты сам введёшь, сохранять и загружать массив. А также выбирать три случайных элемента.
Я снабдил пример ООООЧЕНЬ подробными комментарии о происходящем там.
Но если вопросы всё-таки появятся после разбора примера, милости прошу, всё ещё раз разжую и объясню.
Если что, пиши в личку, можем вечером как-нибудь по скайпу связаться.

исходники r2 не открываются в r1.2, но наоборот вполне себе работает.


- Доброе утро, Агент Пи!
Nick_RimerДата: Четверг, 16 Октября 2014, 21:47 | Сообщение # 160 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem, насколько тебе не показалось бы это громоздким, а работа с массивами - это база, которую обязан знать любой программист, ибо это есть упорядоченный доступ к данным под ОДНИМ именем, но с разной индексацией.
Можешь себе представить комод. В комоде есть ящики, допустим, их будет 12, все они пронумерованы подряд от 1 до 12. И вот в каждом ящике лежит какой-то товар. Чтобы взять нужный товар ты должен подойти к комоду и открыть ящик с нужным номером.

Точно такой же подход используется к управлению массивами. Например, есть массив Goods, он состоит из 12-ти элементов. В каждом элементе записано название товара. Чтобы взять третий товар, мы обращаемся к нему примерно так: Goods(3). Нужен пятый? Тогда Goods(5). Нужен какой-то случайный товар? Пишем вместо числа конструкцию, которая выдаст случайное число от 1 до 12: random(12)+1. Получается, что, написав примерно такую запись: Goods(random(12)+1), мы получим один из 12-ти случайных товаров.
Почему я говорю "примерно так", потому что чисто техническая реализация процесса может немного отличаться в зависимости от синтаксиса разных языков программирования (ЯП), но это не меняет сути. Так же в некоторых ЯП нумерация массива может начинаться не с 1, а с 0. Тогда первым элементом будет элемент с номером 0, а последним - с номером 11, да и рандом тогда будет без "+1". Но это тонкости, и с этим всегда начинаются заморочки, прибавление единиц, вычитание единиц.. не думай пока об этом smile

Чем это удобно?
+ Не нужно создавать отдельную переменную под каждый товар. Это ладно 12. А если их 100? 1000? Переменных не напасёшься, устанешь их создавать. А в случае с массивом останется только просто поправить число входящих в него элементов (число ящиков в комоде).
+ Лёгкие операции с индексами - цифрами, которым применяются разные математические операции (в том числе и выбор случайного индекса) - это невероятно удобно при организации цикла, т.к. такой оптимизации на обычных переменных не достичь!
Минус, пожалуй, может заключаться лишь в том, что главное - это не запутаться в этой самой индексации, в циферках, т.е. не обращаться случайно не к тем элементам или вообще к несуществующему элементу.

Это мы с тобой разобрали одномерный массив. Я надеюсь, что объяснил понятно.

На практике же наравне с одномерными массивами ничуть не реже используются двумерные массивы. Их легко представить в виде матрицы, таблички, содержащей N строк и M столбцов. Ну или представить себе комод с ящиками, только каждый ящик содержит в себе ещё несколько ящиков. Таким образом, чтобы взять какой-то элемент из двумерного массива, мы должны обратиться сначала к определённой строке, а потом к номеру столбца в этой строке (или же наоборот, кому как нравится, кому как в конкретной ситуации удобнее). К двумерному массиву обращение идёт примерно такое: Goods(M,N) - элемент по M-тому столбцу и N-той строке.
Двумерный массив предлагает нам уже в некотором роде "табличку", которую мы можем использовать по своему усмотрению. Например, нам важен не только товар, как он называется, но так же и: его 1) цена, 2) количество товара на складе, 3,4,5...) любое другое количество параметров. Так поступим же вот так:

Пусть 1 столбец - название товара.
2 столбец - его цена
3 столбец - количество товара на складе

И наш массив будет заполнен примерно так:
Конфеты | 50 | 1000
Стулья | 300 | 12
Лопаты | 95 | 210
...

и так далее. А теперь вот что удобно. Нужна нам информация о конфетах? Читаем массив. Goods(1,1) - название, Goods(2,1) - цена, Goods(3,1) - остаток. А самое прелестное, что любые ЯП умеют организовывать циклы для совершения однотипных последовательных операций, которые уменьшают количество строк кода для обработки одних и тех же данных (нифига себе, если бы пришлось писать столько кода для каждого товара! а если бы, опять же, 1000???)
Но про циклы песня отдельная.. хотя они идут так тесно с массивами, что, изучая массивы, нельзя не изучить и циклы, чтобы жить было легче smile

Достоинства всё те же. Неудобства, пожалуй, тоже. Главное, не перепутать строки со столбцами и внимательно следить за индексами.

Я надеюсь, что очень популярно объяснил тебе теорию без особого углубления в подробности. Если тебя интересует более конкретное освещение этих аспектов и на более конкретном языке (или конструкторе), то ты спрашивай, я тебе могу объяснить (даже очень подробно) и сделать разные примеры. Уж на чём-чём, а на массивах у меня не одна собака съедена. Ленюсь только написать статью о конкретном применении массивов на констракте.. эта ведь тема многих волнует, особенно, кто не знаком ни с одним ЯП. Не ты первый, не ты последний, кто ещё задаст вопросы, как это работает.. smile

Теория не запрещает использовать массивы более высоких размерностей (констракт поддерживает до трёхмерных массивов включительно), но на практике больше двух ещё ни разу не попадалось. Тут надо принцип схватить, как это логически организовывается, потом попробовать несколько раз, организоваться массиивы, циклы.. и далее ты этого никогда не забудешь. Тут всё в точности, как с велосипедом! happy

P.S. С массивами, как и с переменными, остаётся открытым вопрос, как данные туда попадут. Если в массиве должна быть какая-то сохранённая конкретная информация, надо её где-то хранить. Откуда-то читать, куда-то записывать. Можно, конечно, и в программе прописать, чтобы каждый раз создавалась конкретная информация, но обычно это "не комильфо".


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Четверг, 16 Октября 2014, 22:21
Поиск:

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