Page 1 of 5

Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 6:00 pm
by Dionis
Всем добрый день. Решил уже серьезно (в 100 раз :mrgreen:) засесть за программирование. Пытаюсь сделать самое простое. Есть объект в виде спрайта. Есть 4 кнопки (стрелки вверх, вниз, влево, вправо). Все это вывел на экран, все ок. Далее нужно сделать, чтобы при нажатии на кнопки объект двигался в соответствующую сторону. Пытаюсь обработать нажатие на спрайт одной из кнопок. В мануале написано
SPRITE_HIT (n$, x,y)
возвращает 1 если точка с координатами [x], [y] попадает внутрь спрайта [n$]. Иначе возвращает 0.
То есть по логике получаем координаты касания - GET TOUCH 0 AS x,y и далее проверяем попали ли они внутрь спрайта 1 (это кнопка вниз) - IF SPRITE_HIT (1, x,y) = 1 THEN (... тут обработчик после нажатия кнопки). Получаю ошибку "Ошибка вычисления функции SPRITE_HIT". Где ошибка ?

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 6:07 pm
by Фант
Привет! Номер спрайта берите в кавычки.
If sprite_hit("1",x,y)....

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 6:07 pm
by Mr. Kibernetik
Вы пишете:

IF SPRITE_HIT (1, x,y)

а функция SPRITE_HIT() принимает имя спрайта в виде строки, а не числа. Функции не совершают автоматического конвертирования числа в строку в отличие от команд, где можно написать SPRITE 1 BEGIN и цифра 1 будет автоматически переконвертирована в строку "1".

У спрайта имя может быть любое, например SPRITE "up arrow" BEGIN.

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 6:11 pm
by Dionis
Ага, благодарю, сейчас попробую :) Мне вообще тяжело в этом плане после пхп. Я то == поставлю, то THEN забуду :mrgreen:

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 9:40 pm
by Dionis
Теперь с поворотами завис. Уже часа полтора сижу. Короче объект двигается туда сюда, тут все отлично. Но нужно, чтобы он поворачивался в соответствующую сторону. Я получаю его текущий угол - GET SPRITE "1" ANGLE current_angle. Но дальше мысль как-то не идет. По идее там, где происходит передвижение нужно дописать изменение угла - SPRITE n$ AT x,y SCALE s ANGLE a FLIP k, но как рассчитать на какую величину - тут я что-то теряюсь совсем.

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 9:43 pm
by Фант
поворот чего? Спрайта?
.....flip... это зеркальное отображение спрайта

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 9:46 pm
by Фант
Если поворот только в 4 стороны, то здесь просто.
создавайте переменную для угла к примеру: sprite 1 at x,y angle ANG
при необходимомти повернуть спрайт добавляйте или уменьшайте 90 градусов: ANG+=90 или ANG-=90

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 9:47 pm
by Dionis
Тфу. Все, разобрался. Я думал, что ANgle поворачивает спрайт исходя из текущего угла. Т.е. если он повернут на 90 градусов, то поворачивает еще на 90 итого 180. Но оказалось, что поворот идет исходя из начального положения, то есть от нуля. Блин, а я долбался так долго :) Все работает.

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 9:49 pm
by Фант
Есть команда которая вычисляет угол спрайта. Можно использовать ее для выпполнения сложных поворотов
GET SPRITE N$ ANGLE X

Re: Нажатие на спрайт - что ему не нравится

Posted: Sun Feb 22, 2015 9:51 pm
by Фант
надеюсь с этим Вы разобрались?
OPTION ANGLE DEGREES
OPTION ANGLE RADIANS
заставляет все тригонометрические функции считать свои аргументы в градусах/радианах. Остальные функции и команды BASIC, которые используют углы в качестве параметров, также затрагиваются этими командами. По умолчанию считается в радианах.

Для расчета в градусах в начале кода надо задать OPTION ANGLE DEGREES