Спасибо! Не ожиданно как-то) NeZnayu, хочу бетку Noobster 2.0)
Добавлено (04.05.2011, 20:36) --------------------------------------------- NeZnayu, ещё мне очень нравится дизайн кнопок у тебя в программах! Просто всё на высшем уровне!
Здравствуйте! Вот хочу писать игры, программы на Dark Basic, но не знаю где можно скачать самую последнюю версию. Если знаете, где можно скачать, поделитесь пожалуйста ссылкой, буду признателен!
И подскажите, где можно найти учебники или уроки по нём. Весь гугл облазил - ничего не нашёл. Заранее большое спасибо! С меня как всегда +
Здравствуйте, уважаемая администрация портала! Очень бы хотелось стать проверенным!
1. Знание русского языка хорошее! Никогда не пропускаю заглавные буквы! 2. Ну этим я как бы ещё не прославился так сказать, нооо... Исправлюсь! 3. Если я за компом - ваш сайт первый, на который я захожу и сижу в нём до самой ночи! 4. Около 40-ка дней 5. 79 постов, активно участвую в обсуждениях! 6. Без этого никак. 7. Поведение примерное, замечаний нет и думаю не будет. 8. 36 единиц 9. Я прочёл все правила и готов им соответствовать! 10. Уважаю всех пользователей портала! Конфликты - никогда с этим не сталкивался, незнаю, что это такое))
Я продолжительное время увлекался компьютерными играми. В 2003 году купил себе комп и поиграл в первую игру под названием "Brother Bear". Прошло время, в 2010 году я заинтересовался созданием игр, но на тот момент вообще небыло опыта в программировании, и я стал скитаться по просторам Google в поисках программы для создания игр без знаний ЯП. Наткнулся на ваш сайт и скачал Game Maker. В нём я таки не разобрался и сразу же удалил. В это время я как раз играл в GTA San Andreas и хотел научиться его скриптовому языку, дабы писать для игры разные фичи, и мне это удавалось, хотя в скриптинге GTA SA я выучил только АЗЫ и немог продвинуться дальше, слишком трудно для меня это было. Потом вспомнил про ваш сайт и про Game Maker, и вновь его скачал в надежде сделать игру, чтобы всё-таки разобраться, что у меня и получилось! Сначала делал игры на кнопках, но они получались какие-то беспонтовые. Я не думал, что мне придётся делать игры на программировании, в данном случае на скриптовом языке GML, я не раасчитывал на это, но всё-же я его выучил и пишу теперь игры исключительно на нём. Хочу выучить С++, но думаю его я не потяну... Прошёл год, как я не играю в игры, надоело (Не тот возраст возможно), но зато очень люблю создавать их
Eggman, пользуйся переменными. А так, можешь создать объект и прописать ему в Create воспроизведение видео и переменную, отвечающая за время перехода в другую комнату. Переменной задаёшь число идентичное времени продолжительности видео. В Step прибавляешь эту переменную на 1 и делаешь проверку, что если переменная больше какого там числа (в твоём случае это время видео) то переходим в другую комнату. Объект кидаешь в комнату, в которой должно воспроизводиться видео. И всё! Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
Сообщение отредактировал vasyan555 - Суббота, 30 Апреля 2011, 21:11
Что значит "Оружея" ? Иди русский язык учить, нечего здесь сидеть чёрти чем заниматься! Тебя в детстве что, не контролировали выполнение домашнего задания или что, немогу понять! Второе: смысл ставить over9999 скобок в предложении?
Здравствуйте! Сегодня я расскажу Вам о том, как создать мультиязычное, текстовое меню с настройками, абсолютно без графики, чисто на коде. Итак поехали! Создаём объекты без спрайтов: o_main - сам объект, в котором будет наше дальнейшее меню. o_settings - здесь будут настройки языка и экрана. Создаём фон: fnt_russian
С объектами разобрались, теперь переходим к написанию кода. Открываем объект o_main и ему в Create пишем:
Code
menu = 'main' //переменная, которая будет служить переходом между меню. В самом начале она равна 'main' select = 1 /*Текущий выбор пункта меню. допустим пункты в меню идут в такой последовательности: New Game Load Game Quit Тогда значит, если select будет равняться двум, будет выбран второй пункт меню "Load Game". Думаю мою логику и принцип поняли. */ maxbtn = 5 //Переменная служит для того, что-бы в определённом меню задавать определённое кол-во пунктов меню, чтобы например, если select == 5, а пунктов меню всего 3, то указатель просто исчезнет с вида. menu_x = 250 //Положение меню по оси Х menu_y = 240 //Положение меню по оси У title_x = 250 //Положение названия меню по оси Х title_y = 210/ /Положение названия меню по оси У
//Далее создаём переменные, содержащие текст, который будет использоваться в меню text_new_game = 'New Game' //Пункт "Новая игра" text_load = 'Load' // Пункт "Загрузить" text_info = 'About' //Ну и так далее... text_quit = 'Quit' text_continue = 'Continue' text_main_menu = 'Main Menu' text_options = 'Options' text_language = 'Language' text_back = 'Back' text_screen = 'Resolution' text_pause = 'Pause'
Переменные объявили, теперь переходим в Step этого-же объекта.
Code
if keyboard_check_pressed(vk_up) {select -= 1} //Если нажата стрелка UP, то уменьшаем переменную выбора пунктов на 1 if keyboard_check_pressed(vk_down) {select += 1} //Если нажата стрелка DOWN, то увеличиваем переменную выбора пунктов на 1 if select > maxbtn {select = 1} //Тут делаем ограничение выбора пунктов, в зависимости от меню if select < 1 {select = maxbtn} if global.resolution > 2 {global.resolution = 1} //Тут делаем ограничение переменной настроек экрана if global.resolution < 1 {global.resolution = 2} if global.switch_language > 2 {global.switch_language = 1} //Тут делаем ограничение переменной смены языка if global.switch_language < 1 {global.switch_language = 2}
//Теперь переходим к созданию настройки переключения языка if global.switch_language == 1 { //Если переменная настр. языка равна 1, то переменным текста присваиваем англ. текст text_new_game = 'New Game' text_load = 'Load' text_info = 'About' text_quit = 'Quit' text_continue = 'Continue' text_main_menu = 'Main Menu' text_options = 'Options' if global.switch_language == 1 text_language = 'Language: English' text_back = 'Back' if global.resolution == 1 text_screen = 'Fullscreen: off' if global.resolution == 2 text_screen = 'Fullscreen: on' text_pause = 'Pause' } if global.switch_language == 2 {//Если переменная настр. языка равна 2, то переменным текста присваиваем рус. текст text_new_game = 'Новая игра' text_load = 'Загрузить' text_info = 'О игре' text_quit = 'Выход' text_continue = 'Продолжить' text_main_menu = 'Главное меню' text_options = 'Опции' if global.switch_language == 2 text_language = 'Язык: Русский' text_back = 'Назад' if global.resolution == 1 text_screen = 'Фуллскрин: выкл.' if global.resolution == 2 text_screen = 'Фуллскрин: вкл.' text_pause = 'Пауза' } //Параметры разрешения экрана rm = room_get_name(self) if global.resolution == 1 { //если переменная разр. экрана равна 1, то переводим игру в оконный режим window_set_fullscreen(0) } if global.resolution == 2 { window_set_fullscreen(1)//если переменная разр. экрана равна 2, то переводим игру в полноэкранный режим window_set_sizeable(1) }
if menu == 'options' {maxbtn = 3} //Тут для каждого меню устанавливаем кол-во пунктов if menu == 'menu' {maxbtn = 5} if menu == 'pause' {maxbtn = 2} if keyboard_check_pressed(vk_escape) { //Если нажата клавиша Enter и мы в игре, то объекты деактивируются и игра переходит в режим паузы if menu == 'game' { instance_deactivate_all(true) menu = 'pause' } }
if keyboard_check_pressed(vk_enter) { if menu == 'main' { if select == 1 {room_goto(level_1); menu = 'game'} if select == 2 {/*game_load('gamesave.inc')*/menu = 'options' select = 0} if select == 3 {menu = 'options'} if select == 4 {show_info()} if select == 5 {game_end()} } if menu == 'pause' { if select == 1 {instance_activate_all(); menu = 'game'} if select == 2 {menu = 'main'; maxbtn = 5; select = 0} } if menu == 'options' { if select == 1 {global.switch_language += 1} if select == 2 {global.resolution += 1} if select == 3 {menu = 'main'; maxbtn = 5; select = 0} } }
Потом создаём событие Draw и вставляем туда код:
Code
draw_set_font(fnt_russian) draw_text(100,100,""+string(menu)) if menu == 'main' { draw_text(title_x,title_y,""+string(text_main_menu)) draw_line(250,233,350,233) if select == 1 {draw_text(menu_x,menu_y,"> "+string(text_new_game)+"#"+string(text_load)+"#"+string(text_options)+"#"+string(text_info)+"#"+string(text_quit))} if select == 2 {draw_text(menu_x,menu_y,""+string(text_new_game)+"#> "+string(text_load)+"#"+string(text_options)+"#"+string(text_info)+"#"+string(text_quit))} if select == 3 {draw_text(menu_x,menu_y,""+string(text_new_game)+"#"+string(text_load)+"#> "+string(text_options)+"#"+string(text_info)+"#"+string(text_quit))} if select == 4 {draw_text(menu_x,menu_y,""+string(text_new_game)+"#"+string(text_load)+"#"+string(text_options)+"#> "+string(text_info)+"#"+string(text_quit))} if select == 5 {draw_text(menu_x,menu_y,""+string(text_new_game)+"#"+string(text_load)+"#"+string(text_options)+"#"+string(text_info)+"#> "+string(text_quit))} } if menu == 'options' { draw_text(title_x,title_y,""+string(text_options)) draw_line(250,233,350,233) if select == 1 {draw_text(menu_x,menu_y,"> "+string(text_language)+"#"+string(text_screen)+"##"+string(text_back))} if select == 2 {draw_text(menu_x,menu_y,""+string(text_language)+"#> "+string(text_screen)+"##"+string(text_back))} if select == 3 {draw_text(menu_x,menu_y,""+string(text_language)+"#"+string(text_screen)+"##> "+string(text_back))} } if menu == 'pause' { draw_text(title_x,title_y,""+string(text_pause)) draw_line(250,233,350,233) if select == 1 {draw_text(menu_x,menu_y,"> "+string(text_continue)+"#"+string(text_main_menu))} if select == 2 {draw_text(menu_x,menu_y,""+string(text_continue)+"#> "+string(text_main_menu))} }
Поздравляю! Вы создали текстовое меню! Пример будет завтра.
P.S:Я статью писал в почти сонном состоянии, когда мой организм уже засыпал. Причина: сутки без сна, 2 дня на рыбалке по жаре (Простите за оффтоп)
Завтра на свежую голову доработаю статью!
Перезарядка оружия.
Во всех шутерах можно перезаряжать оружие. А почему бы нам не сделать это в Game Maker? Этим мы и займёмся! Этот мини урок покажет вам создание перезарядки оружия.
Что нужно: -Пример TDS с такой системой оружия: максимальное кол-во патронов, которые можно нести, переменная для кол-ва патронов обойме и автоматическая перезарядка при 0 патронов в обойме.
Предположим, что есть такие переменные:
Code
ammo_size = 120 //патронов в запасе ammo_clip = 30 //патронов в обойме
Допустим вы выстреляли 12 патронов и хотите перезарядить оружие. Суть такова: создаёте переменную, которая будет содержать кол-во оставшихся патронов в обойме, потом при нажатии на клавишу перезарядки прибавляете к переменной обоймы выстрелянные пули, а от переменной максимального кол-ва патронов вычитаете.
Code
if keyboard_check_pressed(ord('R')) { //клавиша, нажатием на которую будет осуществляться перезарядка if ammo_clip < 30 && ammo_size > 0 { //если обойма неполная и есть патроны в запасе, то rel = 30-ammo_clip //вычитаем из обоймы кол-во оставшихся патронов и записываем значение в переменную rel ammo_clip += rel //прибавляем к обойме выстрелянное кол-во пуль ammo_size -= rel //отнимаем из запасных патронов выстрелянные пули } }
Вот и всё, ничего сложного! Теперь в вашей игре можно перезаряжать оружие Всем спасибо за внимание!
Создание простейшего инвентаря. Часть 1.
Всем привет! Сегодня мы с вами разберём простейшую реализацию инвентаря Что собой представляет инвентарь? Это
ячейки в каждой из которых содержится информация о подобранном вами предмете. Что происходит, когда пользователь
подбирает какой либо предмет? Проверяются все ячейки инвентаря, когда найденна свободная, то записываем в неё
информацию предмета, который подобрали. Не будем терять время и перейдём к делу! P.S: Кто не знаком с циклами и массивами, советую дальше не читать. Для начала создадим все необходимые нам спрайты и объекты.
<Спрайты> s_fruit - спрайт предмета, который мы будем подбирать s_non - спрайт ячейки. Просто создайте пустой прозрачный спрайт размером в 32х32
<Объекты> inv - объект, в котором создаются ячейки инвентаря o_case - ячейка. Создаются в объекте inv o_fruit - предмет, который мы будем подбирать
Спрайты и объекты созданы, теперь можно переходить к написанию кода. Открываем объект inv, создаём событие Create и пишем код:
Давайте разберём. Первая строка отвечает за кол-во ячеек по горизонтали, вторая - по вертикали. В итоге у нас должно получиться 9
ячеек. Третья и четвёртая строки инициализируют двойной цикл. Пятая строка создаёт объекты ячеек по горизонтали и
вертикали и записывает индекс каждой ячейки в массив. Думаю поняли. Всё, с этим объектом завершили! Переходим теперь к объекту o_fruit. Создаём события нажатой кнопки мыши (не глобальной) и пишем такой код:
Здесь код отвечает за подбор предмета и помещения его в первую свободную ячейку инвентаря. Работает это так: если у объекта ячейки спрайт == s_non, значит она свободна, иначе занята. Запускаем цикл, который проверяет все ячейки и создаём условие, которое проверяет все ячейки на наличие предмета,
если его нет, то найденной пустой ячейке присваиваем спрайт объекта, на который нажали, уничтожаем этот объект и
выходим из цикла. С этим разобрались.
Далее идём в o_case и создаём два события. -Нажатая кнопка мыши -Draw
В событии нажатия кнопки мыши пишем ну очень сложный код:
Code
if sprite_index == o_fruit //Тут проверяем спрайт объекта, который находится в данной ячейке {o_player.hp += 10 //Если условие истина, то прибавляем игроку 10 единиц здоровья и sprite_index = s_non;} //Опустошаем ячейку, на которую нажали
И последнее, что мы с вами должны сделать, это отрисовать ячейку, т.к. она невидима из-за спрайта. Открываем ранее созданное событиие Draw и пишем такие строки:
Code
draw_set_alpha(0.3); //Устанавливаем прозрачность на 0.3 draw_rectangle(x, y, x+32, y+32, 0); //Рисуем вокруг спрайта заполненный квадрат draw_set_alpha(1); //Устанавливаем прозрачность на 1 draw_rectangle(x, y, x+32, y+32, 1); //И поверх рисуем не заполненный квадрат draw_sprite_ext(sprite_index, image_index, x, y, 1, 1, image_angle, c_white, 1); //И наконец отрисовываем сам спрайт ячейки
Теперь ячейки будут отображаться нормально
С вами был vasyan555, спасибо за прочтение статьи, до новых встреч! :)
Создание простейшего инвентаря. Часть 2.
Всем снова здравствуйте! С вами vasyan555. В этой части урока мы с вами продолжим создание инвентаря. В первой части мы познакомились с основами инвентаря и простейшей его реализацией. Итак, чем мы займёмся.. Проведём оптимизацию инвентаря и реализуем складывание вещей в стопку. Это всё можно будет сделать всего-лишь одним объектом, ну и конечно же предметом(ами), нажимая на которые, они будут добавляться в инвентарь. Основы создания надеюсь Вы поняли, поэтому расскажу коротко. Как обычно создаём новый проект. Создаём наш старый, знакомый объект inv, и в Create пишем такой вот код:
Code
w = 3; h = 3; for(i = 0; i < w; i += 1) { for(j = 0; j < h; j += 1) { Spr[i,j] = -1; Amount[i,j] = 1; } }
Получив знания с первого урока, я думаю Вы знаете, за что отвечает каждая строка данного кода. Но как мы видим, код слегка дополнен двумя строками. Давайте их разберём.
Spr[i,j] = -1; Эта строка отвечает за спрайт объекта, лежащего в конкретной ячейке. Циклом и массивом мы каждой ячейке присваиваем "нулевой" спрайт, тоесть все ячейки пусты.
Amount[i,j] = 1; Здесь строка отвечает за количество объектов в ячейках. Каждой из всех ячеек мы присваиваем кол-во 1 Так, с этим разобрались. Теперь нам нужно сделать отрисовку спрайтов в ячейках. Создаём событие Draw и пишем код:
Здесь всё устроено немного иначе. Сначала мы инициализируем цикл, проверяющий все ячейки. Далее отрисовываем ячейки. Думаю об этом принципе рисования Вы узнали из первого урока, поэтому зацикливать внимание я на этом не буду. Потом идёт отрисовка спрайта объекта в занятых ячейках. И последнее, что мы проверяем, это отрисовку количества объектов в определённой ячейке. В данном случае рисовать количество мы будем только в том случае, если в ячейке находится больше одного объекта.
Основа нашего с Вами инвентаря готова. Всё, что нам осталось, осуществить подбор и складывание предметов в инвентарь. Создаём спрайты s_item1,s_item2, s_item3 и объекты и назначаете им соответствующие спрайты. Для того, чтобы не пришлось писать много кода в каждый объект, мы напишем скрипт. Создаём скрипт и назовём его add_item и в нём пишем следующий код:
Всё также запускаем цикл, который проверяет все ячейки инвентаря. Потом проверяем наличие объекта в ячейках, пока не находим пустую, и в переменную найденной ячейки записываем спрайт подобранного объекта, уничтожаем его и выходим из цикла (В данной ситуации это необходимо!). Иначе, если при проверке был обнаружен объект, который мы хотим подобрать, то тогда увеличиваем количество предметов в ячейке с найденным предметов, уничтожаем его и также выходим из цикла. Всё, наш скрипт написан. Теперь осталось его, как-бы так сказать, "привести в действие". В каждый созданный объект (o_item1, o_item2... их может быть любое кол-во, на ваше усмотрение) в событие Left Pressed пишем инициализацию нашего написанного скрипта:
Code
add_item();
Готово. Теперь создаём комнату, размещаем объект inv в левый верхний угол комнаты и произвольно размещаем предметы. Тестируем на работоспособность и радуемся тому, что научились создавать крутой, но в то же время простой для понимания инвентарь!
В этом уроке: 1. Ходьба 2. Поворот за мышью 3. Стрельба
Итак, приступим! Для начала определимся, что нам нужно: игрок, умеющий ходить, поворачиваться и стрелять. Создаём спрайт игрока, пули и стены: s_player s_bullet s_wall P.S: спрайты должны быть повёрнутыми вправо!
Теперь создадим 3 соответствующих объекта и назначим им только, что созданные спрайты: o_player o_bullet o_wall
Далее открываем объект o_player, и в Step пишем код:
Code
image_angle = point_direction(x,y,mouse_x,mouse_y) if keyboard_check(ord('W')) {y -= 5} if keyboard_check(ord('S')) {y += 5} if keyboard_check(ord('A')) {x -= 5} if keyboard_check(ord('D')) {x += 5}
Первая строка определяет направление от середины игрока, до курсора и присваивает значение к углу поворота спрайта. Вторая строка проверяет нажатость клавиши W, и если условие истина, то смещаем игрока вверх на 5 пикселей. Аналогично с другими проверками, только смещения разные, в зависимости от нажатой клавиши. P.S: Y- (вверх), Y+ (вниз), X- (влево), X+ (вправо)
Теперь ваш персонаж умеет ходить и поворачиваться в сторону мыши! Можете проверить, для этого создаёте комнату, поместите туда объект игрока и нажмите на зелёный треугольник для запуска. Работает! Хорошо, теперь давайте создадим препятствия, через которые, игрок не мог бы проходить. Откройте раннее созданный объект стены - o_wall. Поставьте ему галочку в Solid. Этим вы делаете его "твёрдым". Это нужно для столкновений. Теперь в объекте игрока создайте событие столкновения со стеной и впишите код:
Code
x = xprevious y = yprevious
Что же дают эти 2 команды? Они возвращают объект на предыдущую позицию, благодаря чему не дают ему смещаться дальше. Также расставьте стены по комнате и протестируйте на работоспособность
Теперь приступим к стрельбе. Нам нужно, чтобы пуля летела по направлению мыши, а также поворачивалась по направлению. Для этого, в Create у пули прописываем код:
Code
move_towards_point(mouse_x,mouse_y,10) image_angle = direction
mouse_x - координата мыши по оси X mouse_y - координата мыши по оси Y 10 - скорость полёта пули Вторая строка поворачивает спрайт в сторону полёта.
С пулей разобрались. Теперь нужно осуществить стрельбу. Открываем объект игрока, создаём событие "Global left pressed", и пишем код:
Code
instance_create(x,y,o_bullet) //создаёт объект пули в координатах игрока
Протестируйте игру!
Как видите, пули пролетают сквозь стен, это можно легко исправить!
В объекте пули создайте событие столкновения со стеной и впишите такой код:
Code
instance_destroy() //уничтожаем пулю при столкновении с объектом стены
Вот, пожалуй всё. На этом урок окончен, спасибо за внимание!
Ходьба по неровной поверхности в платформере.
Всем привет! Сегодня я Вам расскажу о том, как реализовать ходьбу по неровной поверхности в плаформере. Для начала давайте рассмотрим способ данной реализации. Итак. Для работы моего способа у вас ходьба в платформере должна быть осуществлена следующим образом: при движении спрайт игрока должен отражаться соответственно направлениям, т.е. если игрок движется влево, то image_xscale = -1;, иначе image_xscale = 1;. Каким же образом мы будем перемещать игрока вдоль неровной поверхности? К нам на помощь приходят циклы. Циклом мы проверяем кажду свободную позицию впереди игрока и чуть выше, и если эта эта позиция свободна, то перемещаем туда игрока. Давайте теперь рассмотрим код. (Данный код помещать в Step)
Code
var Dir, D, xn, yn; if image_xscale == -1 {Dir = 180; D = -10} else {Dir = 0; D = 10}
if place_meeting(x+D, y, o_solid) {
for(i = 0; i < 135; i += 2) { xn = x + lengthdir_x(speed, Dir + i); yn = y + lengthdir_y(speed, Dir + i); if place_free(xn, yn) {x = xn; y = yn; exit;} } }
В начале мы объявляем временные переменные, хранящие направление игрока и позицию впереди игрока.
Dir - напрвление D - отражение спрайта (сторона, в которую смотрит игрок) xn, yn - переменные, хранящие свободную позицию перед игроком.
Далее изменяем эти переменные. Если спрайт отражён влево, т.е. игрок смотрит влево, то изменяем Dir на 180 (180 - направление влево), D - присваиваем значение -10 (-10 - позиция левее). Аналогично с другим. Далее ставим проверку на столкновение с объектом. x+D - из переменной D считывается текущее направление игрока. (Лучше всего для всех твёрдых объектов создать один родительский, и проверять столкновение только с ним, потому, что проверять столкновения со всеми объектами - очень трудоёмкий процесс) И если столкновение произошло, то запускаем цикл, проверяющий все свободные позиции относительно игрока, и если эта позиция найдена, то в переменные xn, yn записываем найденную свободную позицию и ставим проверку на эту позицию, и если она свободна, то перемещаем туда игрока и выходим из цикла.
На этом урок окончен. Спасибо за внимание! До новых встреч!
Создание системы частиц.
Приветствую всех пользователей портала! В ходе разработки моего проекта, я остановился на реализации эффектов. Знаю, что существует весьма хорошая система частиц, в которой можно создавать практически любые эффекты. Но создание этой системы занимает немалое время в плане написания кода, поэтому я решил, так сказать, заменить/упростить эту систему на более удобную. Ну чтож, давайте начнём разработку нашей с Вами системы! Оперировать мы будем всего-лишь с одним объектом и скриптом, создающий партиклы. Создаём объект o_eff, добавляем ему 2 события - Step и Draw. В Step пишем такой код:
Code
image_alpha -= life; //уменьшаем прозрачность на значение из переменной life if image_alpha <= 0 {instance_destroy();} //удаляем объект, когда он станет невидимым if radius_min < radius_max {radius_min += radius_up;} //увеличиваем размер партикла до максимального заданного
значения на значение переменной radius_up Как видите, код отвечает за жизнь партикла и его размеры. Теперь откройте событие Draw и отрисуйте партикл.
Code
draw_set_alpha(alpha); //устанавливаем прозрачность из переменной alpha draw_set_color(make_color_rgb(red, green, blue)); //устанавливаем цвет партиклов из переменных draw_circle(x, y, radius_min, 0); //и рисуем сам партикл с радиусом radius_min
Как вы уже поняли, код отвечает за отрисовку партиклов, прозрачность, цвет и радиус. Объект/генератор частиц создан, но в нём полно неизвестных нам переменных, задавать значения которых мы будем скриптом. Создайте скрипт с именем make_particle и впишите туда следующий код:
Code
repeat (argument14) //арг14 - кол-во частиц, создаваемых за раз { with instance_create(argument0, argument1, o_eff) //применяет действия к созданому объекту { speed = argument2; //скорость полёта direction = argument3; //направление life = argument4; //жизни alpha = argument5; //прозрачность clr = argument6; //один цвет для всех. Например (134,134,134) или (150,150,150). if argument13 == true {red = clr; green = clr; blue = clr;} //если параметр общего цвета истинна else //то присваиваем всем партиклам один заданный цвет, иначе {red = argument7; green = argument8; blue = argument9;} //присваиваем произвольный radius_max = argument11; //максимальный размер radius_min = argument10; //начальный размер radius_up = argument12; //скорость увеличения размера до максимального } }
Вот мы и присвоили всем переменным объекта o_eff значения. Всё, система готова! Теперь чтобы создать партиклы, используйте функцию
Создание <Combobox> Всем снова здравствуйте! В очередной раз вы узнаете, как создавать Combobox. Что это такое, объяснять не буду. Итак, времени у меня мало, поэтому сразу дам весь код. Когда буду свободен - оформлю как следует.
Объект o_combobox_papa
Объект o_combobox #Parent = o_combobox_papa <Create>
if mouse_x > x && mouse_x < x+100 && mouse_y > y+h && mouse_y < y+h+(h*Tabs) { if Show { Color_tab = c_dkgray; mY = (mouse_y-h - y+h) div h; if mouse_check_button_pressed(mb_left) { Sel = t[mY]; Show = false; } } }