stepRandom = 0; //ВОТ ЭТОТ ЦИКЛ while (stepRandom<rround){ alarm[0]= room_speed*5; }
Ну вот оно проблемное место, ты сам его выделил. Что нужно сделать? Сделать так, что бы в теле этого цикла изменялись переменные stepRandom или rround, иначе т.к они не меняются, условие постоянно истинно и цикл никогда не остановится.
Код
stepRandom = 0; //ВОТ ЭТОТ ЦИКЛ while (stepRandom<rround and alarm[0] != room_speed*5){ alarm[0]= room_speed*5; }
Нужно писать так: place_free(x, y + 1); Проще говоря, сначала объект перемещается в указанные координаты, проверяется столкновение и перемещается обратно.
GameMakerBeginner, Как вариант, можно создать переменную массив. В первой ячейке храните текст который должен выводиться, во второй - текущее время(current_time) Далее с помощью не сложных подсчетов (current_time - значениеВторойЯчейки div 200) выводите часть строки на экран.
Код
//Событие Создания typedText = ["", 0];
Код
//Событие N if (был_открыт_диалог) typedText = ["Какой то текст 123.", current_time];
Код
//Событие Рисования if (typedText[0] != "") draw_text(x, y, string_copy(typedText[0], 0, clamp((current_time - typedText[1]) div 200, 0, string_length(typedText[0]))))
Либо просто записывать во вторую ячейку 0 и каждые N времени увеличивать её значение на 1. Вместо тех подсчетов просто использовать её значение. Но используя current_time, можно добавлять задержку перед выводом.
Добавлено (12 Февраля 2020, 21:20) ---------------------------------------------
ЦитатаGameMakerBeginner ()
Ну и я так понимаю что в вашей задержке alarm нужно оставить пустым?
Какой? То что я написал if (alarm[0] == -1) alarm[0] = 60; это решение той проблемы "если писать alarm в Draw, то он никогда не выполнится". Вообще аларм это обычная переменная(массив), значения которой постоянно уменьшаются на 1 каждый шаг. Когда оно достигнет 0 - выполняется нужный код.
я нажимаю [клавиша], диалоговый прямоугольник появляется, но тут же исчезает
Код
var S= distance_to_object(object_player); if (S<=3 and keyboard_check_pressed(vk_enter)) script0();
Это оно отвечает? Если да, то не верно.
Простой вариант(костыль): 1. Создаёшь переменную типа isDialog = false; 2. В рисовании script0(); меняешь на isDialog = true 3. Следующей строкой(там же в рисовании) дописываешь if (isDialog) script0();
1. Создаёшь массив curDialog = [noone, -1]; Первый элемент означает ID экземпляра/объекта с которым игрок взаимодействует Второй элемент хранит в себе ID скрипта, который рисует окно диалога.
2. В шаге пишешь:
Код
//Если объект игрока очень близко и Enter нажат... if(distance_to_object(object_player) < 4 and keyboard_check_pressed(vk_enter)) curDialog = [object_player, script0];//Записываем в массив object и id скрипта.
//Если (диалог уже начат и игрок уже НЕ близко) или нажат Enter... if ((instance_exists(curDialog[0]) and distance_to_object(object_player) > 3) or keyboard_check_pressed(vk_enter)) curDialog = [noone, -1];//сбрасываем переменную диалога
3. В рисовании:
Код
//Если диалог начат... if(curDialog[1] > -1) execute_script(curDialog[1], id, curDialog[0]);//вызываем скрипт рисования диалога + передаём ему id собеседников
Этот способ хорош тем что он быстрый, гибкий, простой(минимум кода), если у тебя всего одно окно и взаимодействие только с одним игроком - используй первый.
Добавлено (12 Февраля 2020, 19:16) ---------------------------------------------
ЦитатаGent ()
Если написать в draw только alarm[0] = 60, то событие никогда никогда не выполнится, т.к. таймер каждый раз будет обновляться
Создал два объекта: 1) Персонаж, 2) Его руки и прикреплённый к ним пистолет.
Вообще если по нормальному делать, то первый объект это персонаж и его руки, второй объект это пистолет. Если руки это отдельная часть которая двигается, то рисуешь её через lengthdir_x/y
ЦитатаXploiiited ()
как можно связать эти два объекта, чтобы при повороте рук на половину круга (то есть до положения над головой/под ногами), персонаж разворачивался вместе с руками.
Заводишь переменную и каждый шаг присваиваешь ей что то типа такого: handDir = mouse_x > objHand.x и далее в зависимости от этой переменной рисуешь персонажа и его руку смотрящую влево(если handDir == 0) и смотрящую вправо(если handDir == 1)
Скорее всего. Если в шейдере использовать texture2DArray/sampler2DArray, то он вообще не запускается. Если писать sampler2D s_Texs[64]; то вроде бы работает, но из самого гамака текстуры не передаются.
Хм, хорошо, спасибо. Ещё один вопрос, можно ли как то передать в шейдер все текстуры как массив? Без массива придётся строчить кучу if else if else if...
Предположим, есть 4 текстуры(трава, земля, песок и т.д) и ещё одна текстура где красный канал обозначает прозрачность первой текстуры, зеленый канал - прозрачность второй, синий - третей и альфа - четвертой. Дальше через шейдер(которому мы передаем все 5 текстур) рисуем модельку ландшафта.
Подскажите, как можно удалить теги с пустым содержанием? Скриншот
На скриншоте видно теги <Район><Город><НаселенныйПункт> а между ними пустота(пробелы, табуляция, переносы строк). Их нужно все удалить, те теги между которыми что то есть трогать не нужно.
Всем привет! Как то давно собрал из двух дисков RAID-0 массив, всё хорошо работает по сей день. Но вот недавно купил другую материнскую плату, всё детали спокойно переставил, кроме дисков. Материнская плата их видит, но сам RAID-0 работать никак хочет(т.е либо по отдельности, либо никак)
В меню где выбираются сами диски и создаются массивы, уже заранее стоят 2 массива(чего по инструкции быть не должно). Удалить их и собрать заново не получается, ошибка(что то типо "не найдены диски или не достаточно места").
Теперь вопрос: Это у меня что то с материнкой, или RAID-0 как то по особенному переносится? P.s ничего не чистил и не форматировал, просто перенес два диска на другую мат плату и всё. P.s.s производители разные, биосы тоже(в одном Click Bios II, в другом что то от ASUS'a), сбрасывал настройки - не помогло.
Добавлено (26 Февраля 2019, 16:28) --------------------------------------------- Уточню: Старая материнка - fm2-a55m-e33 MSI Новая материнка - fm2a68m-hd+ ASRock
По сути, ты, принуждаешь нового пользователя ввести данные кошельков.
Ресурс у меня такой, где в профиле пользователя должен быть указан хотя бы 1 кошелек, привязана 1 соц.сеть и т.д. Пустые строки конечно же будут, но они же ведь ничего не занимают?
Нужно хранить большое кол-во стобцов, и что бы в будущем при добавлении новых, не возникало особых проблем. Вообще было бы хорошо хранить всё в одной таблице, но не скажется ли это на производительности? Неудобно конечно, но переживу.
Добавлено (20 Февраля 2019, 14:34) --------------------------------------------- Хранить в разных таблицах я хотел лишь для удобства, напр в табл. wallets есть 5 колонок: username, qiwi, webmoney, payeer, yamoney, lastchange табл. profile: username, regdate, logindate, comments Вот у этих двух таблиц колонка username должна соответствовать колонке username из табл. accounts(т.е она основная).
Т.е когда добавлялась запись в табл. accounts, автоматически появлялись записи с остальных со значениями по умолчанию. Я раньше это делал через триггеры, но потом понадобилось создать еще одну таблицу с ссылками на соц. сети, а триггеры же работают только при добавлении/удалении, вот пришлось вручную заполнять...
Да и как я потом понял, триггеры не советуют так использовать, но и не хотелось бы размещать в одной таблице по 80 колонок.
Сообщение отредактировал Quad69 - Среда, 20 Февраля 2019, 14:23
DeadDay, ты имеешь ввиду при добавлении пользователя в основную таблицу, добавлять данные также в остальные? Если да, то чем это отличается от триггеров? А если вдруг, мне понадобиться создать новую таблицу, а в основной уже есть данные, они же не перенесутся.
Мне надо хранить большое количество данных на одного пользователя, контактные данные, кошельки, баланс и т.д. Можно всё запихнуть в одну таблицу, но так управлять не удобно и вроде для производительности не очень хорошо. Подскажите, как правильно хранить такой объём данных?
Всем привет! Подскажите, как связать две таблицы в бд mysql? Если точнее, то нужно что бы при добавлении записи в основную таблицу, она также появлялась в остальных в таблицах с таким же id. Обычно я делал это триггерами, но как я понял это не правильное решение. p.s в вебе я недавно
1. Как сделать так чтобы объект крутился вокруг какой либо точки но сам не вертелся, как планета вокруг солнца =) 2. Как сделать окантовку для объекта. 3. Как сделать так чтобы один объект рисовался на другом. (Я знаю что можно так сделать... но не знаю как.) 4. Как сделать так чтобы пиксели были ровными.
1. Ну я бы такое делал с помощью lengthdir_x, lengthdir_y. 2. Мой способ:
Код
draw_sprite_ext(sprite, 0, x - 1, y, 1, 1, 0, c_black, 1); draw_sprite_ext(sprite, 0, x + 1, y, 1, 1, 0, c_black, 1); draw_sprite_ext(sprite, 0, x, y - 1, 1, 1, 0, c_black, 1); draw_sprite_ext(sprite, 0, x, y + 1, 1, 1, 0, c_black, 1);
draw_sprite(sprite, 0, x, y);
Но тут обводка может быть только черной. 3. depth = Объект.depth - 1; 4. можно прибавлять к координатам всего что рисуется .001, например draw_sprite(spr, 0, x + .001, y + .001);
Сообщение отредактировал maksim1221232 - Вторник, 06 Ноября 2018, 20:49