Смотря на каком API. Но, общая идея в том, что пройти по всем пикселям, чтобы выяснить. одинаковы ли они. Обычно есть какой-то метод, возвращающий цвет пикселя на указанных координатах. У BufferedImage это getRGB(x, y), что позволяет
Код
public static boolean imageIsEmpty(BufferedImage img) { int w = img.getWidth(); int h = img.getHeight(); int p = img.getRGB(0, 0); // цвет пискеля в верхнем левом углу for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) { // если пиксель не совпадает с верхним левым то изображение не пустое. if (img.getRGB(x, y) != p) return false; } return true; }
ред.: приведенный выше метод тоже подходит, с пометкой про то что он проверяет на то что изображение действительно пустое (RGBA 0, 0, 0, 0) а не просто залито одним цветом.
Сообщение отредактировал YellowAfterlife - Пятница, 27 Ноября 2015, 19:57
а зачем нам лишний объект смерти если достаточно просто спрайт сменить ему sprite_index=enemy_dead_spr
Потому что иначе придется во все события объекта добавлять проверку на то, что он уже мертв, и не должен бегать\атаковать\...? Один дополнительный объект на всех врагов - малая стоимость.
Если я переведу документацию раньше первоисточников это же хорошо )
Документацию должны переводить люди, хорошо знакомые с терминологией. Иначе получаться "розетки" как у вас или "духи" (вместо sprite) как в переводе документации по GameMaker.
Так же, переводят обычно уроки, а не саму документацию. Но, вот уж досада, когда Unity Technologies делают видеоурок по той или иной вещи, они делают и субтитры, и платят знающим своё дело людям за локализацию.
(TDS) Как сделать так чтобы когда игрок сталкивается с объектом, если я верчу его мышью не задивал стенки? Чтобы он не крутился когда затронул своим боком стенку
И иногда он застрявает в ней
Сделать игроку отдельную переменную, отвечающую за поворот, и использовать её при рисовании (через draw_sprite_ext или прочее), а не менять image_angle (что так же поворачивает маску столкновений объекта, позволяя застрять в стенах после поворота).
procedure Tform1Timer(Sender: TObject); //timer vizov peremennoy begin shar; end; end;
procedure TForm1.shape2ContextPopup(Sender: TObject; MousePos: TPoint; //sozdanie upravlenia paneley var Handled: Boolean); begin shape2.Top:=mouse.cursorPos.Y -Form1.ClientOrigin.Y; end;
end.
Компилятор вежливо интересуется, почему в одной из твоих функций просто написано "шар;" внутри:
ЦитатаRolexOsmiy ()
Код
procedure Tform1Timer(Sender: TObject); //timer vizov peremennoy begin shar; end; end;
Мне тоже интересно. Что ты хотел этим сказать? Возможно, эту строку стоит убрать? Ещё есть подозрения, что повторная строка "end;" после неё тоже лишняя.
Сообщение отредактировал YellowAfterlife - Вторник, 01 Декабря 2015, 17:38
Язык программирования: Java | JavaScript | C# Мультиплеер: клиент-сервер Направление: 2D игры | платформер Если такой существует, можете подсказать?
В Unity с недавних пор есть встроенная возможность создания двухмерных игр. Языки программирования - C# или JavaScript-образный UnityScript (на выбор). Есть встроенный сетевой движок (UNet) и масса созданных пользователями. Можно и просто взять .NET сокеты и сделать реализацию самостоятельно.
Всё ещё немного толстоват (3МБ для относительно несложной игры), но значительно лучше, чем было пару месяцев назад (20МБ на пустом проекте). Возможно, для двухмерных игр уже будет достаточно -- нужно смотреть использование ресурсов на более сложных играх. Ну и вопросы о совместимости - сделанные людьми на прошлый Ludum Dare игры, к примеру, всё ещё случайным образом самовоспламенялись (крахи и непохожее на декстопный рантайм поведение).
как правильно называется эффект в играх с "вытягиванием" перспективы? желательно английское название такое часто встречается в старых шутерах, и в майнкрафте вроде такая настройка была, но название не помню wacko
MilkShape 3D поддерживает и SMD, и MDL\MD3. Если тобой ранее не был истрачен период пробного использования программы, это наименее болезненное решение. Иначе можно поискать, для каких трехмерных редакторов есть плагины для импорта моделек из Q3, и как можно их перевести в подходящий формат (скорее всего цепочка будет "исходная модель -> редактор 1 -> .3ds -> редактор 2 -> целевая модель").
Не уверен, есть ли по умолчанию ограничение по ФПС, или игра просто делает "всё возможное". Можно подкрутить вручную,
Код
max_fps 30
Есть ещё всякие cl_rate\cl_updaterate\cl_cmdrate, но это уже для сетевой игры. Если после всех манипуляций ноут всё равно будет перегреваться, можно так же снизить разрешение экрана. Или поинтересоваться у производителя\продавшей компании, не значит ли это, что у устройства бракованное охлаждение.
Недавно добавленные встроенные функции для сетевой синхронизации довольно похожи на Photon. Оба рассчитаны на разбиваемые на комнаты игры. Для всяких ММОРПГ скорее всего придется делать что-то более специфичное (для передачи координат объектов лишь в зоне видимости и прочего). От читерства никакая серверная архитектура сама по себе не спасет - если можно отправлять данные, то можно эти отправляемые данные и подделать.
Привет. Прописываю код if collision_point(x,y,object1,1,0) {рисую}. Проблема такова: программа рисует даже в том случае, если в точке (x,y) у спрайта отсутствуют пиксели. Маска стоит точная.
Точно ли проверяются правильные координаты (к примеру, можно порой случайно проверять x, y вместо mouse_x, mouse_y)? И отображается ли правильная форма маски в Mask Properties (кнопка "Modify Mask" в окне редактирования спрайта)? Порой может понадобится отрегулировать Alpha Tolerance чтобы маска была правильной формы (если в изображении чрезмерно плавный переход и\или есть базовый уровень прозрачности)
(JS-скрипинг опять усложнился, придем к тому что JS=CS будет)
Спойлеры, но... JS\US это и так C#. Точнее сказать, он компилируется в IL байт-код, как и C#. Можно даже потыкать собранные DLL-ки и посмотреть на получающиеся кривоватые классы. Компилятор так же делает ужасающие вещи, чтобы привести некоторые обычные для JS структуры к рабочему на IL виду.
Цитатаandarky ()
теперь не поддерживаются Non-Convex коллайдеры.
Concave коллайдеры - своеобразный ад в системе столкновений. Из-за того, что при работе с ними нельзя делать почти никаких предположений, проверка столкновений работает с ними значительно медленнее. В то же время, разбиение на convex коллайдеры требует довольно хитрых алгоритмов, что нередко вынуждены выдавать избыточные количества полигонов для соответствия указанной форме. Сюда же потом примешиваются лишние расходы ресурсов на обработку кучек полигонов как одного.
Цитатаandarky ()
Первым разочарованием для меня от Unity был отказ о SWF.
SWF никогда не был "полноценным" таргетом, и стать таким не смог бы - в Flash API всё делается по своему, вплоть до собственного языка шейдеров, что несовместим с остальными. Полагаю, где-то между объявлением об отмене AS4 и замедлением цикла обновлений Flash Player'а, Unity Technologies решили, что лучше уж двигаться в сторону HTML5, чем убить кучу ресурсов на таргет для платформы, которую непрерывно пытаются закопать в землю.
Цитатаandarky ()
Самое ужасное что они хотят отменить WEBplayer.
Unity Web Player работает на NPAPI, то есть как внешнее приложение внутри окна браузера. Некоторое время назад производители браузеров решили, что такой тип работы плагинов не очень хорош (плагин может делать [в т.ч. из-за уязвимостей] с системой пользователя и\или браузером что угодно и браузер воспрепятствовать этому никак не может) и установили временные рамки для ухода от него (в Chrome были в начале предупреждения, потом отключение на странице по умолчанию, потом отключение плагина по умолчанию, и лишь после - полная недоступность API). Соль тут лишь в том, что Unity Technologies не успели довести HTML5 таргет до стабильного состояния к моменту отключения плагина по умолчанию в Chrome (возможно, отчасти из-за продолжения поддержки веб плеера и SWF).
Цитатаandarky ()
Но как его привинтить в Win7 я тоже не смог, поэтому приходится держать 2 винды.
Об этом в отдельности, можно так же держать виртуальную машину с Win8\10, и дать ей прямой доступ к секции диска с проектом. Сборка на VM происходит медленнее, но от нужды перезагрузки системы это спасает.
И в морском бое, и в шахматах, одной из координат даются буквенные индексы, чтобы люди не путались в порядке при озвучивании (4,8 или 8,4?). Для такого можно сделать константы. Иначе это называется "ассоциативный массив", и стандартной его реализацией является std::map (урок).