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

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
Nick_RimerДата: Четверг, 16 Октября 2014, 08:59 | Сообщение # 161 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem, ну хорошо.. рандом всё равно умеет рандомизировать только числа, так что тут вопрос организации того, как и куда ты запишешь эти 40 товаров.
Если у тебя будет одномерный массив с элементами, куда вписаны наименования товаров, размерностью [1..40] (или [0..39], если нумерация с нуля), то чего проще делать random(40)+1 для первого варианта (или random(40) для второго)?
Собственно, какие тут могут быть ещё проблемы? Для С2 не забыть добавить floor(), т.е. floor(random(40)+1) и floor(random(40)) соответственно, иначе никогда не выберешь ни один товар.
Если массив двумерный, допустим, в столбцах какие-то параметры товара (название, цена и т.д.), а каждая новая строка - отдельный товар, то понятно, что рандомизировать по количеству строк (стандартно это у массива, кажется, Y). Если товаров 40, то и формулы те же..
Уже выбранные позиции можно записывать отдельно, например, в сторонний одномерный массив, и каждый раз при выборе случайного товара проверять, а не выбирали ли мы уже такой? Если да, то выбрать другой.

Я, если честно, корня проблемы-то не увидел.. dry
А с твоим уровнем репутации я вообще не могу понять, то ли лыжи не едут, то ли я какой-то не такой. Может я не понял глобальности задачи? biggrin


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

Сообщение отредактировал Nick_Rimer - Четверг, 16 Октября 2014, 09:03
Nick_RimerДата: Понедельник, 13 Октября 2014, 08:30 | Сообщение # 162 | Тема: Направление оружия в 8 направлениях
заслуженный участник
Сейчас нет на сайте
frorns, если бы я ещё смог понять, что ты написал.. wacko
Если ты хочешь, чтобы я тебе смог помочь относительно твоего примера, лучше пришли мне свой исходник или его часть, я посмотрю, что можно сделать, а то жонглировать какими-то абстрактными вещами я не хочу.. у меня будет свой взгляд на проблему, тогда как он не будет удовлетворять решению твоих задач. Можешь залить файл на любой свободный ресурс и кинуть ссылку в личку. Распространять не буду biggrin


- Доброе утро, Агент Пи!
Nick_RimerДата: Воскресенье, 12 Октября 2014, 23:12 | Сообщение # 163 | Тема: Рандом
заслуженный участник
Сейчас нет на сайте
madsen, я сто миллионов раз уже, кажется, писал на эту тему. Внимательно читай вот этот самый пост: ПОСТ
Там выведенная мной формула даже выделена синим.

Теперь про особенности С2.
Если СС создаёт случайные ЦЕЛЫЕ числа (1, 99, 40, 27...), то С2 работает хитрее. Он создаёт случайную ЦЕЛУЮ часть и добавляет к ней офигенной длины хвост ВЕЩЕСТВЕННОЙ части. Например, 25.34785691783568976...
Однако гораздо чаще хочется получить всё-таки числа целые. Первый раз, когда я столкнулся с рандомом в С2, я не понимал, почему у меня не работает то, что всегда и везде работало.

Про это очень ВАЖНОЕ замечание я рекомендую почитать то, что я написал вот здесь: ПОСТ

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


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

Сообщение отредактировал Nick_Rimer - Понедельник, 13 Октября 2014, 08:22
Nick_RimerДата: Воскресенье, 12 Октября 2014, 18:26 | Сообщение # 164 | Тема: Рандом
заслуженный участник
Сейчас нет на сайте
madsen, а пытался ли вообще понять?
Последнее китайское объяснение: СКАЧАТЬ (то же самое, что я объяснил, но в исходнике)
Файл сделан на C2 r184
Срок хранения файла 30 дней


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

Сообщение отредактировал Nick_Rimer - Воскресенье, 12 Октября 2014, 18:26
Nick_RimerДата: Воскресенье, 12 Октября 2014, 17:31 | Сообщение # 165 | Тема: Направление оружия в 8 направлениях
заслуженный участник
Сейчас нет на сайте
frorns,
Я не играл в эту игру на денди, но вот набросал простой пример стрельбы в 8 сторон.

СКАЧАТЬ
Файл сделан на C2 r184
Срок хранения файла 30 дней


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

Сообщение отредактировал Nick_Rimer - Воскресенье, 12 Октября 2014, 18:10
Nick_RimerДата: Воскресенье, 12 Октября 2014, 16:57 | Сообщение # 166 | Тема: Рандом
заслуженный участник
Сейчас нет на сайте
madsen, ну а спавнить в отрицательных координатах пробовал?

System -> Create object

Object to create - выбираешь объект, который надо спавнить
Layer - номер слоя, на котором это будет происходить
X - координата Х
Y - координата Y

Если ты хочешь, чтобы объект спавнился за пределами экрана где-нибудь вверху и падал вниз, то ставь отрицательный Y. Для спрайта с точкой origin по середине поставь это расстояние чуть больше половины спрайта.
Для спрайта 32х32 поставь спавн в координатах, например, (300, -20). Если надо снизу, то Y должен быть больше высоты твоего экрана.
Если надо слева, то отрицательный Х. Если справа, то Х должен превышать твою ширину экрана.

Если тебе нужно рандомно генерить объекты за пределами экрана со всех четырёх сторон, можешь запилить, как вариант, такой рандом:

сначала ты проверяешь, чему равен floor(random(4))
Положим, что 0 - появление сверху, 1 - справа, 2 - снизу, 3 - слева.
Теперь проверяем.
0: Х = floor(random(LayoutWidth+1)); Y = -(Sprite.Height/2 + 5).
1: X = LayoutWidth + Sprite.Width/2 + 5; Y = floor(random(LayoutHeight+1)).
2: X = floor(random(LayoutWidth+1)); Y = LayoutHeight + Sprite.Height/2 + 5.
3: X = -(Sprite.Width/2 + 5); Y = floor(random(LayoutHeight+1))
Вроде бы нигде не ошибся.
Функция floor() нужна для правильного формирования пределов рандома в целочисленном формате.

Даже если у тебя стоит Destroy outside layout, то практика показывает, что объект не уничтожается сразу при создании за пределами экрана. Впоследствии же, когда он всё-таки снова попадёт за пределы экрана, он будет уничтожен.


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

Сообщение отредактировал Nick_Rimer - Воскресенье, 12 Октября 2014, 17:11
Nick_RimerДата: Воскресенье, 12 Октября 2014, 12:09 | Сообщение # 167 | Тема: Пункт Collision
заслуженный участник
Сейчас нет на сайте
zoom9966,
Не слушай ничего по поводу overlapping! Это совершенно другая песня!!
Collision - это столкновение.
Overlapping - перекрытие (когда объект налезает один на другой)

Чтобы проверить столкновения, тебе нужен вот этот пункт. Я не знаю, честно, как его можно было не заметить..

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

У меня тоже стим-версия. Только что даже обновилась до релиза 184. Если у тебя не стоит обновление до бета версий, то тебе надо бы сделать вот так:


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

Сообщение отредактировал Nick_Rimer - Воскресенье, 12 Октября 2014, 17:02
Nick_RimerДата: Воскресенье, 12 Октября 2014, 11:56 | Сообщение # 168 | Тема: Ошибка при экспорте Android
заслуженный участник
Сейчас нет на сайте
AndrewVersus, насколько мне помнится, Minify script должен корректно работать, если ты установишь на комп Java. Без него не пашет и точно ошибку выдаёт. Правда, мне он и выдавал такую ошибку, что, мол, Java не стоит, чё ты от меня хочешь? smile

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

Сообщение отредактировал Nick_Rimer - Воскресенье, 12 Октября 2014, 11:56
Nick_RimerДата: Среда, 01 Октября 2014, 13:59 | Сообщение # 169 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Neia, Serega-A,
а если не полениться и сделать 2-3 анимации, чтобы не так бросалось в глаза однообразие, и каждый раз играть случайную, то ваще здорово smile
физика - это хорошо, но не представляю даже, как её к сетке прикрутить..


- Доброе утро, Агент Пи!
Nick_RimerДата: Понедельник, 29 Сентября 2014, 08:23 | Сообщение # 170 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Serega-A,


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

Сообщение отредактировал Nick_Rimer - Понедельник, 29 Сентября 2014, 08:23
Nick_RimerДата: Пятница, 19 Сентября 2014, 16:12 | Сообщение # 171 | Тема: Вопрос по c2 (очередной)
заслуженный участник
Сейчас нет на сайте
Neia,
Ну если мне память не изменяет, он написал, что использует bullet.
Та ваще пофигу, главное, чтобы человек принципы логики понимал smile


- Доброе утро, Агент Пи!
Nick_RimerДата: Пятница, 19 Сентября 2014, 16:03 | Сообщение # 172 | Тема: Вопрос по c2 (очередной)
заслуженный участник
Сейчас нет на сайте
Jake23,
Сравнивай положение координат Х главного героя и врага.
Я точно не помню, но у пули движение, кажется, задаётся в сторону конкретного угла.
Движение "слева-направо" - это, кажется, 0 градусов.
А таким образом движение "справа-налево" - 180 градусов.

Сравнивай так:
Если hero.X > enemy.X (т.е. главный герой находится справа от врага), тогда у поведения пули ставь угол 0 градусов.
Иначе, если hero.X < enemy.X (т.е. главный герой находится слева от врага), тогда у поведения пули ставь 180 градусов.

Понятно объяснил?
Не забудь использовать ELSE.

P.S. если говорить конкретнее, то такая проверка проходит относительно точки origin конкретных спрайтов. Идеальнее всего будет, если эта точка находится посередине спрайта. Если нет, всегда можно сделать погрешность (sprite.X +/- sprite.Width). Надеюсь, этот момент тоже ясен.


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

Сообщение отредактировал Nick_Rimer - Пятница, 19 Сентября 2014, 16:07
Nick_RimerДата: Четверг, 18 Сентября 2014, 22:14 | Сообщение # 173 | Тема: Управление стиком в C2
заслуженный участник
Сейчас нет на сайте
madsen,


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

Сообщение отредактировал Nick_Rimer - Четверг, 18 Сентября 2014, 22:14
Nick_RimerДата: Суббота, 13 Сентября 2014, 22:56 | Сообщение # 174 | Тема: Еще один нубский вопрос по c2
заслуженный участник
Сейчас нет на сайте
Jake23,
Сделай какую-нибудь глобальную переменную, например EnemyCount, по-умолчанию = 0.
А потом нажми на Add action под событием со спавном и добавь там действие: увеличить EnemyCount на 1.
После чего добавь между строками 13 и 14 событие c проверкой: EnemyCount < 5
А строку 14 со своим спавном каждые 1,5 секунды запихай к нему в подусловие.

Всё понятно?


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

Сообщение отредактировал Nick_Rimer - Суббота, 13 Сентября 2014, 22:57
Nick_RimerДата: Суббота, 13 Сентября 2014, 22:52 | Сообщение # 175 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem,
Ну почти дословно звучит так: "выбрать объект, удовлетворяющий выражению".
Я выбираю тот number, который удовлетворяет условию, что его номер кадра анимации равен количеству таких объектов на сцене, т.е. в данном примере = 3.
Таким образом я хочу скрыть его, когда сбрасываю Num в 1 (там ведь до бесконечности можно жать пробел). Если бы этой строки не было, то номер 3 не скрывался бы, как остальные.

Такую проверку надо делать, сколько бы ни было таких объектов, чтобы скрыть последний, только в том случае, если будет возвращение Num на 1 (строка 3). Иначе, это можно не делать.
Убери строки 3 и 4, и тогда можно будет пройти от начала до конца 1 раз.


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

Сообщение отредактировал Nick_Rimer - Воскресенье, 14 Сентября 2014, 00:26
Nick_RimerДата: Суббота, 13 Сентября 2014, 20:20 | Сообщение # 176 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem,
Ну мне это даже нравится при условии достаточного владения временем smile
Вот тебе ещё исходник. Надеюсь, теперь это то, что надо happy

СКАЧАТЬ
Исходник сделан на СС r1.2
Срок хранения файла 30 дней


- Доброе утро, Агент Пи!
Nick_RimerДата: Суббота, 13 Сентября 2014, 18:41 | Сообщение # 177 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem,
Не уверен, что до конца понял тебя, но сделал вот так: скачать
Пойдёт?

Исходник сделан на СС r1.2
Срок хранения файла 30 дней


- Доброе утро, Агент Пи!
Nick_RimerДата: Суббота, 13 Сентября 2014, 16:48 | Сообщение # 178 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem,
Функций вместо переменных?!
Что-то я не понимаю смысла вопроса, ведь переменная и функция - это совершенно разные вещи.
А фразу
Цитата
есть ли разница между for each object как отдельном под-событии и одним из условий
я что-то не понял совсем.

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

А преимущество использования функций видно там, где выполняется какая-то однотипная работа. Функция позволяет написать код только однажды вместо многократного его написания. Из разных мест программы можно вызвать функцию и тем самым отработать содержащийся в ней код. В функцию можно передавать различные параметры, с которыми она может работать внутри кода. В конце выполнения функция возвращает определённые параметры, если это от неё требовалось, и передаёт их в место, откуда была вызвана. Функция может также и ничего не возвращать (аналог процедур в ЯП Паскаль).
В случае кода, который я тебе написал, в мои функции ничего не передаётся, и они ничего не возвращают, я сделал их просто для уменьшения писанины, меньше строк - понятнее и удобнее код. Сам можешь заметить, что я одни и те же функции вызывают в нескольких разных местах. Не используй я функции, пришлось бы писать каждый раз этот код в том месте, где я захотел бы их вызвать.

Последний вопрос мне труден для понимания.. вообще For each object работает, как обычный цикл FOR в каком-нибудь ЯП (если тебе известен хоть один). В этом условии порядок выбора нам не важен, он определяется программой автоматически.
У нас есть несколько объектов, по которым мы начинаем "бегать". Нашли первый - выполнили все подсобытия, находящиеся внутри For each object, при этом происходит работа с конкретным, выбранным в данный момент объектом. Нашли следующий - ещё раз выполнили все условия уже для нового объекта. И так далее, пока не будут пройдены и обработаны все объекты. Только после этого будут выполняться какие-то условия, следующие за For each object.

Я смог ответить на все вопросы, или что-то осталось не ясно? Попробуй сформулировать вопрос несколько по-другому, если что-то не так. Если совсем не понятно, напиши в личку, можем связаться по скайпу, например, объяснить словами будет попроще, чем писать много буков biggrin

Добавлено (13.09.2014, 16:48)
---------------------------------------------
Как пример функции, которая возвращает значение, можно привести, допустим, сложение двух чисел.
Функция выдает простой результат: Result = a + b;
Везде в программе, где нужно сложить два числа, мы будем вызывать функцию, передавать в неё какое-то a, какое-то b, а получать в ответ их сумму.

Пример чуть более сложной функции. Пусть функция выполняет одно из четырёх действий: сложение, вычитание, умножение, деление.
Передавать в функцию мы будем три параметра: число a, число b и числовой параметр operation - переменная, которая будет иметь значение от 1 до 4, что означает одну из операций.
После чего мы вызываем функцию, которая будет проверять, например:
Если operation = 1, то Result = a + b;
Иначе если operation = 2, то Result = a - b;
Иначе если operation = 3, то Result = a * b;
Иначе ели operation = 4, то Result = a / b;
А на выходе мы получаем интересующий нас результат


- Доброе утро, Агент Пи!
Nick_RimerДата: Суббота, 13 Сентября 2014, 12:49 | Сообщение # 179 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
заслуженный участник
Сейчас нет на сайте
Anthem,
Заново перенабрал исходник (благо, что он небольшой) для твоей версии СС.
Взять можно тут: скачать
Исходник сделан в СС r1.2
Время хранения файла 30 дней


- Доброе утро, Агент Пи!
Nick_RimerДата: Суббота, 13 Сентября 2014, 12:27 | Сообщение # 180 | Тема: Вопрос по c2
заслуженный участник
Сейчас нет на сайте
Jake23,
думаю, что как-то так: исходник
Файл сделан в С2 r180
Срок хранения 30 дней


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

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