посмотри пример http://www.yolkfolk.com/dizzyage/boo...ol12_mouse.txt
Вид для печати
посмотри пример http://www.yolkfolk.com/dizzyage/boo...ol12_mouse.txt
Ну чего, вам помогает перевод, или так себе?)
В гостевой книги не отписываются.
Titus, да мне это интересно, но ситуация так сложилась, что такие вещи просто ОООчень тяжело воспринимает мой мозг. Мне как бы легче придумать, нарисовать/порисовать. И я прекрасно понимаю, что если мне что-то бы было нужно, то хоть совет я знаю у кого спросить. Прошу не путать совет и помощь :) Если б я кодил, я б уже 3-ю часть допиливал :biggrin:
Новая глава 14. Статические кисти
Между прочим очень интересно. Я раньше мельком как-то смотрела, а теперь читаю каждую строчку.
У меня сейчас вот какая проблема: нужно чтоб предмет стал видимым и не вещью, а блоком. Как в диззи2, когда ставишь сундук. У меня предмет видим изначально - не хочет скрываться( Что не правильно?
Данные предмета:
Тип - статик
материал - блок
драв - имг+мат
дисайбл - да
Потом не интересно будет) Давайте оставим это как запасной вариант. Если уж не разберемся - тогда скину.
Ага. Пропал. Только теперь я видать что-то напутала в скрипте:
func UseObject_1008( idx )
{
if(ObjGet(idx,O_ID)==3013)
{
Message1(5,4, "ВЫ...");
MessagePop();
InventorySub(idx);
idx = ObjFind(1008);
ObjSet(idx,O_CLASS,0);
idx = ObjFind(2009);
ObjSet(idx,O_DISABLE,0);
}
else
{
DropObject(idx);
}
}
рисуешь сундук-блок с draw=0 делаешь место применения предмета. пишешь скрипт, что бы при приминении сундука-предмета предмет пропадал, а сундук-блок делаешь draw=3
---------- Post added at 23:19 ---------- Previous post was at 23:16 ----------
idx = BrushFind(2009); // если это сундук-блок
BrushSet(idx,B_DRAW,3);
Уговорили) Скинула
---------- Post added at 23:25 ---------- Previous post was at 23:22 ----------
osa, сундук - 3013
---------- Post added at 23:26 ---------- Previous post was at 23:25 ----------
Да, еще такой вопросик: за что отвечает №23 (в данных предмета) colider?
нужен сундук-предмет и сундук блок:) или на сундуке предмете сделать свойство hard collision
---------- Post added at 23:29 ---------- Previous post was at 23:27 ----------
и вот оно свойство colision:)
Daisy, посмотрел твой скрипт про мост.
Во-первых, ты применяешь функцию ObjFind и к статическим, и к динамическим кистям, хотя эта функция ТОЛЬКО для динамических кистей, а для статических свои функции и свои названия свойств, хотя и похожие. Мост у тебя статическиой кистью нарисован. Для статических эта функция называется BrushFind(id).
Попробуй исправить) Сегодня же в главе описано новой было на русском.
---------- Post added at 00:30 ---------- Previous post was at 00:03 ----------
Это свойство описано в главе про игрока. Пока только на английском)
Цитата:
HandlerCollision()
This is the collision handler that is called by the engine when the player collides with a dynamic brush that has the O_COLLIDER property set to call handler. It can detect if this is the first time when the collision happened, if the collision is still going on, or if it has just ended. By default, it also deals with hurt or kill class objects.
CollideObject_ID_MODE()
This latent callback is requested from the collision handler, when the player collides with a collider object (set to call handler), that has the same brush id, as specified in the callback's name (ID). If the MODE number, from the callback's name, is 0, then the callback is called when the player and the object exit from collision. If MODE is 2, the callback is called during the collsion, and if it's 1, the callback is called when the player enters in collsion with the object for the first time.
Цитата:
HandlerCollision()
Этот хендлер обработки столкновений вызывается движком, когда игрок соприкасается с динамической кистью, у которой в свойстве O_COLLIDER установлено call handler. Он способен определять только ли началось соприкосновение, идет ли оно, или только что закончилось. Так же этот хендлер используется при обработки столкновений с объектами, у которых установлен класс hurt или kill.
CollideObject_ID_MODE()
Этот фоновой колбек вызывается из хендлера столкновений (collision handler), когда игрок соприкасается с объектом, id-номер которого прописан в поле ID имени функции. Если поле MODE в имени функции равно 0, то, колбек вызывается, когда игрок и объект прекращают соприкасаться. Если это поле равно 2, то колбек вызывается всегда, когда имеется в наличие соприкосновение. И, наконец, если поле MODE равно 1, то колбек вызывается в момент первого соприкосновения с объектом.
Цитата:
The second kind of dynamic collision, is with objects that have the collider property set to hard collision. This is usual to platforms, elevators, bridges or other similar things that must move.
The collision is not too precise, but it will try to rise the player on top of these objects. No handlers are called, it's all part of the player's movement system.
Цитата:
Второй тип реакции на соприкосновение с объектом - это соприкосновение с твердым объектом. Для этого у объекта должно быть установлено свойство collider = hard collision (твердое соприкосновение). Обычно это используется в платформах, лифтах, мостах и тому подобных перемещающихся объектах.
Данный тип соприкосновения не очень точный, но но зато позволяет автоматически поднимать игрока на вершину объекта. Никаих хендлеров при этом не вызывается, эта функциональность заложена в движок.
---------- Post added at 00:32 ---------- Previous post was at 00:30 ----------
И еще, ты легкомысленно относишься к маске спрайтов. Нужно ее использовать, чтобы было красиво)
Заменила
idx = ObjFind(2009);
ObjSet(idx,O_DISABLE,0)
на
idx = BrushFind(2009);
BrushSet(idx,B_DRAW,3);
Мост появляется, но он воздушный(
Я только вчера прочитала про активные объекты. Немножко не понятно вот это: что такое ObjGet( idx, property ) и ObjSet( idx, property, value ). Там написано, а я не понимаю. Врое не блондинка :o
Я еще ничего больше не рисовала после того, как усышала про маски. Только у меня все-равно их нет.
Это потому, что:
Опять же все это написано в той главе, надо внимательно читать. И в примерах показано.Цитата:
После изменения свойств одной или нескольких статических кистей, вносящих изменения в карту материалов, необходимо обязательно вызвать функцию обновления карты материалов. Если этого не сделать, карта материалов данного экрана останется прежней, пока вы не войдете заново в данную комнату.
Поэтому просто добавь после изменений строчку
GameCommand(CMD_REFRESH);
и все будет в шоколаде.
---------- Post added at 10:17 ---------- Previous post was at 10:11 ----------
Эти две функции равносильны следующему:
a = ObjGet(idx, property) ->
a = значение параметра property объекта idx.
т.е.
a = ObjGet(idx,O_FLIP); ->
а = свойство O_FLIP обьекта с индексом idx
а индекс получаем функцией ObjFind()
таким образом:
idx = ObjFind(1000);
a = ObjGet(idx, O_FLIP); ->
a = свойство O_FLIP обьекта с ID = 1000
А функция ObjSet делает все наоборот, присваивает свойству какое-то значение.
idx = ObjFind(1000);
ObjSet(idx, O_FLIP, 1); ->
(свойство O_FLIP обьекта с ID = 1000) = 1
---------- Post added at 10:19 ---------- Previous post was at 10:17 ----------
Попроси набор графики с маской у Yuriy. У него они самые лучшие)
---------- Post added at 10:46 ---------- Previous post was at 10:19 ----------
Несколько замечаний для начинающих DizzyAGE писателей:
- Начинайте делать игру на большой карте, заведомо шире, чем предполагаемая игра. Размер карты не влияет на размер игры. На размер игры влияет количество нарисованной графики на этой карте. И рисовать игру начинайте из центра карты, чтобы не столкнуться с нехваткой поля деятельности.
- Активно используйте слои 0-7. Я рекомендую распределять слои так:
Слой 0 - слой неба. На этом слое должно отображаться небо. Оно может быть не задействовано в игре и быть черным. Может быть одноцветным, голубым. Может быть одноцветным, меняющимся в зависимости от времени дня. Может быть многоцветным, меняющимся, как, например, в игре Fantastic Dizzy на Amig'e.
Слой 1 - слой дальних обьектов на фоне неба. Это может быть луна, солнце, какие-то летящие по небу объекты, например, кометы, звезды. Так же это может быть пейзаж заднего фона, например, лес вдалеке, город и т.д.
Слой 2 - слой персонажей дальнего плана. Летающие ЗА деревьями птицы, плавающие ЗА водорослями и кораблями рыбы и т.д.
Слой 3 - слой ладшафта заднего плана. Это лес, земля, обстановка домов. Словом, практически весь основной ландшафт.
Слой 4 - слой персонажей ближнего плана. Персонажи игры, а так же движущиеся на переднем плане птички, рыбки и т.д.
Так же на этом плане предпочтительно сделать игрока (его слой задается в файле gamedef.gs в свойстве PLAYER_LAYER). Так же это может быть слоем предметов, которые берет и кладет игрок.
Слой 5 - слой подводного пейзажа ближнего плана. Здесь находится все, что загораживает игрока, но должно находиться под водой. Например мачты, водоросли и т.д.
Слой 6 - слой воды. Вода это не только спрайт анимированного контура воды, но еще и полупрозрачный спрайт толщи воды, который накладываясь на весь подводный пейзаж, делает его подводного цвета.
Слой 7 - слой пейзажа ближнего плана. Это все, что загораживает игрока. Это могут быть столбы, деревья, мебель и т.д. Так же в этом слое можно размещать рельеф подводного мира, который не загораживается слоем воды. В частности это дно и бока водоемов.
Так же это слой триггеров, которые желательно делать полупрозрачными фиолетовыми квадратиками. Можно варировать цвет триггеров, в зависимости от их функционала.
- Старайтесь использовать графику только с маской. Это и красиво, и поможет избежать проблем, когда вы вдруг захотите в вашей игре сделать другой фон или пейзаж заднего плана. Чтобы сразу представить, как будет выглядеть ваша графика на фоне чего-либо, начинайте рисовать карту на фоне голубого неба. Сделайте план 0 огромным голубым небом, и уже поверх него рисуйте спрайтами с маской. Это небо всегда можно убрать или запретить к рисованию поставив ему draw = 0.
- Рисуйте ландшафт так, чтобы в перспективе он мог бы свободно скроллироваться. Возможно, вы захотите потом или сразу сделать игру именно со скроллирующимся ландшафтом. Так же отдельно для красоты могут скроллироваться фоны заднего плана.
- Избегайте использования в игре монотонного земляного ландшафта наподобие игр Dizzy 5. Игра при этом выглядит просто унылым лабиринтом.
- По возможности рисуйте свои спрайты предметов и игроков. Повторение в играх одних и тех же персонажей и предметов делает игры мене интересными.
Titus, добавлю свои пять копеек к пункту 1 из практического опыта так сказать, но это на усмотрение/желание автора:
Изначально я сделал просто и банально сетку в ворде с примерными размерами (масштабом) комнат, и отпечатал лист формата а4 на принтере. Обычной шариковой ручкой без излишних подробностей начал рисовать всё, что было придумано на бумаге, схематически, чтобы избежать дурной работы непосредственно в редакторе. И только тогда как было нарисована практически вся карта, и была заложена основная линия сюжета с небольшими головоломками, тогда я начал переносить всё в редактор. Сложность возникла с замком, поскольку мне в первый раз было трудно определиться с кол-вом комнат, этажностью и прочими мелочами, он был сырым на бумаге до последнего момента, а хотелось сделать и небольшим и интересным, чтобы играющий не бродил бессмысленно по "пустотам", но это мелочи и уже в процессе, всё, как говорит Риндекс - "взошло" и стало на свои места. После рисованного варианта я четко знал свой размер карты, и что делать дальше. Уже в процессе переноса, приходили разные интересные мысли в виде декоративных украшений и, незначительных для общего сюжета, решений тех или иных головоломок.
Это лично мой опыт создания, и я не принуждаю делать именно так, но мне было так легче работать. Мне кажется, что сразу представлять что хочешь и наносить на карту - это удел профи.
Я допустил одну единственную ошибку - слишком много нарисовал :) Наверное, нужно было сделать что-то в 10 комнат и остановиться, но мы же не ищем легких путей? ;) Тем более не хотелось действительно урезать то, что нарисовалось в голове.
----------------------------------------------
Daisy & all
Спрайты, маски и прочее. Те или иные готовые спрайты с масками можно взять из буржуйских игр, предварительно распаковав. Категорически рекомендую начинающим не ломать дров с написанием игры/рисованием карты, а посидеть недельку другую и просто распаковать десяток игр и покурить готовые игровые карты, слои, то, как делали и наносили спрайты на карту по слоям другие авторы. Вы сэкономите себе кучу времени в будущем делая что-то свое не задумываясь о многих нюансах.
Я, практически все стандартные спрайты (которые использовал) на примере других делал маску сам, поскольку хотел набраться опыта и разобраться, чтобы потом что-то модернизировать или делать своё. Конечно, приветствуется опыт работы в графическом редакторе, но при большом желании, что касается спрайтов для игры, можно научиться самостоятельно. На досуге я надергал/переделал/немного систематизировал очень много "общих для рисования" стандартных и своих спрайтов для редактора и планирую это выложить здесь в паблик только после релиза нашей совместной игры. Нужно будет или нет кому-то каждый решит сам для себя. Ранее никак.
Могут быть не все спрайты с маской, например:
http://www.onlinedisk.ru/cache/d528e...721295b0706f81http://www.onlinedisk.ru/cache/9a1c7...1976d9064f6304
Что с маской, то с черным слоем.
Общеупотребительные спрайты.
100 ground.tga
101 boulders1.tga
102 boulders2.tga
103 cave.tga
120 bricks.tga
124 pipes.tga
125 woods.tga
Нужно заменить файлы с архива на те, что есть в движке - \dizzyage\game\data\tiles и далее по папкам.
Замечательно. Это как раз то, что ей нужно.
Это те, которые можно заменить без потери нарисованного просто заменой. На новых я еще масок добавил, но они уже не совместимы со стандартными - ни номерами, ни расположением спрайтов. Только предварительное удаление папки tiles и копирование новой.
Я, конечно, не профи, но на листке рисовать я не могу. Пыталась что-то сделать, но результат на компе совершенно другой. В результате я плюнула на эти листки и рисую сразу в компе, как только в голову что-то стукнет)
yuriy, спасибо за спрайты с масками. Я заменила файлы, но... то ли я что-то не так сделала, то ли это так и должно быть... Я не вижу изменений :|
Вот прочесть бы это до начала рисования :D Грамотно написано. Вот я постоянно теряюсь - где и на каком слое мне что-то рисовать, а здесь все четко)
Daisy, если ты заменила файлы, то изменения ты увидишь, например:
Земля находится в низшем слое, чем камень которым ты будешь перекрывать землю. Земля в 3-е слое, камень в 4-м. Маска обязательна на предмете, которым ты хочешь перекрыть что-то находящееся за ним.
http://www.onlinedisk.ru/cache/9eeca...639f8d22339bca
1. Камень без маски в 4 слое. Земля в 3 слое тоже безмаски.
2. Камень с маской в 4 слое. Земля в 3 слое с маской или без не имеет значения.
Нет, ничего не изменилось(
---------- Post added at 12:08 ---------- Previous post was at 12:02 ----------
Я поняла в чем разница (есть кустики с маской), а вот камни - никак(
---------- Post added at 12:31 ---------- Previous post was at 12:08 ----------
Все получилось! Спасибо!
Вода (ее видимая часть) должна быть перед Диззи или за ним?
Daisy, гребень? перед Диззи.
Спасибо.
А я не знаю, он у меня изначально такой. А как сделать с красным? Меня смущает вот что: нет пузырьков, когда он в воду ныряет и монетки полупрозрачные (без маски) и такая же трава, вот:
http://s019.radikal.ru/i629/1210/9c/c7a89cb59cbft.jpg
http://s50.radikal.ru/i128/1210/1e/6cddef8737b0t.jpg
Или так подойдет?
Кстати, там, где монетка - надо что-то еще вокруг рисовать (ну, землю там, камни...) или так оставить (у меня почти точно так же и колодец)?
Daisy, файлы из архива закинь в папку \dizzyage\game\data\tiles\dizzy
Там, где камни-фон, вертикали из камней режут глаз - творчески, творчески, а не быстрому. То же касается и с заполнением земли - делай несколькими спрайтами, используй клавишу F в движке для вращения спрайтов земли, чтобы не было ярко выраженного повторяющегося узора земли.
Ласты и акваланг. Чтоб ходил в костюме и плавал, тож нужно включать поддержку в gamedef.gs
#def ID_SCUBA 4000
#def ID_FLIPPERS 4001
здесь id 4000 и 4001 нужно прописать соответственно те, которые ты назначила ранее. Про пузыри не помню.
Ага, там, у Юрия, голубенькие баллоны. А вот папочка dizzy с жёлтыми - http://sderni.ru/147737