Мне нужна помощь с изучением синтаксиса.
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Мне нужна помощь с изучением синтаксиса.
Должен быть цикл к примеру:
Loop:
Get touch 0 as x,y
'Распознаем касание экрана пальцем
If x>-1 then
If sprite_hit("названиеилиномерспрайта",x,y)=1 then
'Если палец каснулся спрайта происходит следующее
...
Else
'Если палец не каснулся спрайта происходит следующее
...
Endif
Goto loop
Loop:
Get touch 0 as x,y
'Распознаем касание экрана пальцем
If x>-1 then
If sprite_hit("названиеилиномерспрайта",x,y)=1 then
'Если палец каснулся спрайта происходит следующее
...
Else
'Если палец не каснулся спрайта происходит следующее
...
Endif
Goto loop
Re: Мне нужна помощь с изучением синтаксиса.
Спасибо за ответы.Фант wrote:Должен быть цикл к примеру:
Loop:
Get touch 0 as x,y
'Распознаем касание экрана пальцем
If x>-1 then
If sprite_hit("названиеилиномерспрайта",x,y)=1 then
'Если палец каснулся спрайта происходит следующее
...
Else
'Если палец не каснулся спрайта происходит следующее
...
Endif
Goto loop
Сейчас попробую.
Re: Мне нужна помощь с изучением синтаксиса.
Спасибо. Все получилось, как мне кажется
У меня столько идей для игр
Но для начала хочу понимать, как и что работает.
У меня столько идей для игр
Но для начала хочу понимать, как и что работает.
Re: Мне нужна помощь с изучением синтаксиса.
Дубовая логика:
Сначала ты снимаешь координаты касания
get touch 0 as x,y
Далее возвращаешь координаты спрайта
Get Sprite "name" pos x1,x2
Зная длину(h) и ширину(w) спрайта, его геометрические размеры, ты сравниваешь (при условии, что координаты спрайта считываются с его левого конца)
If x>0 and ((x>X1 and x<x1+w) and (y>y1 and y<y1+h)) then' сдесь идёт сначала проверка на касание x>0,далее проверка на то , что координаты касания находятся в спрайте, если вы поменяет знаки сравнения местами то получите проверку на расположенность касания в не спрайта.
При таком сравнение вы можете не только сравнивать нажали вы на спрайт но и на какую точку в нем, ну там в правый угол спрайта или в левый, для более обширной работы с ним.
Сначала ты снимаешь координаты касания
get touch 0 as x,y
Далее возвращаешь координаты спрайта
Get Sprite "name" pos x1,x2
Зная длину(h) и ширину(w) спрайта, его геометрические размеры, ты сравниваешь (при условии, что координаты спрайта считываются с его левого конца)
If x>0 and ((x>X1 and x<x1+w) and (y>y1 and y<y1+h)) then' сдесь идёт сначала проверка на касание x>0,далее проверка на то , что координаты касания находятся в спрайте, если вы поменяет знаки сравнения местами то получите проверку на расположенность касания в не спрайта.
При таком сравнение вы можете не только сравнивать нажали вы на спрайт но и на какую точку в нем, ну там в правый угол спрайта или в левый, для более обширной работы с ним.
Re: Мне нужна помощь с изучением синтаксиса.
Оооо, Mark99, спасибо, попробую.MARK99 wrote:Дубовая логика:
Сначала ты снимаешь координаты касания
get touch 0 as x,y
Далее возвращаешь координаты спрайта
Get Sprite "name" pos x1,x2
Зная длину(h) и ширину(w) спрайта, его геометрические размеры, ты сравниваешь (при условии, что координаты спрайта считываются с его левого конца)
If x>0 and ((x>X1 and x<x1+w) and (y>y1 and y<y1+h)) then' сдесь идёт сначала проверка на касание x>0,далее проверка на то , что координаты касания находятся в спрайте, если вы поменяет знаки сравнения местами то получите проверку на расположенность касания в не спрайта.
При таком сравнение вы можете не только сравнивать нажали вы на спрайт но и на какую точку в нем, ну там в правый угол спрайта или в левый, для более обширной работы с ним.
Я только учусь, не закидывайте камнями. Ещё не раз напишу ))
Re: Мне нужна помощь с изучением синтаксиса.
Mark99,
Попробовал, движется только в правый нижний угол.
Что делаю не так?
Как Фант писал, у меня получилось. Но мне в самом деле с касанием в разные части спрайта интересно сделать.
Попробовал, движется только в правый нижний угол.
Code: Select all
GRAPHICS
OPTION ANGLE DEGREES
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
OPTION TEXT POS CENTRAL
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
w=100 ! h=100
n$="krug"
SPRITE n$ BEGIN w,h
SHADOW ON
DRAW CIRCLE 50,50 SIZE 50
DRAW TEXT "ТРОНЬ" AT 50,50
SPRITE END
SPRITE n$ AT maxx/2,maxy/2
SPRITE n$ DELAY 0.03
SPRITE n$ DA 1
SPRITE n$ LOOP
SPRITE n$ SHOW
LOOP:
GET SPRITE n$ ANGLE z
GET TOUCH 0 AS x,y
GET SPRITE n$ POS x1,y1
IF x>0 AND ((x>x1 AND x<x1+w) AND (y>y1 AND y<y1+h)) THEN
SPRITE n$ AT x,y ANGLE z
ELSE
GOSUB 1
ENDIF
GOTO LOOP
1 FIELD "nomer" TEXT "Мимо" AT maxx/2,0 SIZE 70,25
FIELD "nomer" BACK COLOR 0,0,0
FIELD "nomer" FONT COLOR 1,1,1
RETURN
Что делаю не так?
Как Фант писал, у меня получилось. Но мне в самом деле с касанием в разные части спрайта интересно сделать.
Re: Мне нужна помощь с изучением синтаксиса.
У тебя не выходит потому что ориентация спрайта идёт по его центру.Tantrixx wrote:Mark99,
Попробовал, движется только в правый нижний угол.
Что делаю не так?
Как Фант писал, у меня получилось. Но мне в самом деле с касанием в разные части спрайта интересно сделать.
Вот смотри твой спрайт обозначен оранжевым цветом, и его центр в точке X1,y1
Далее ты проверяешь. Условие X1<x<x1+w и y1<y<y1+h поскольку твои координаты спрайта начинаются от центра ,а после ты прибавляешь его стороны то ты какбы сдвигаешь его полящадь прикосновений.
Твой спрайт оранжевый,но чувствует прикосновения он в области синего квадрата.
Для решения такой проблемы тебе надо сдвинуть область определения касания спрайта ровно на его половину тоесть:
Code: Select all
GRAPHICS
OPTION ANGLE DEGREES
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
OPTION TEXT POS CENTRAL
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
w=100 ! h=100
n$="krug"
SPRITE n$ BEGIN w,h
SHADOW ON
DRAW CIRCLE 50,50 SIZE 50
DRAW TEXT "ТРОНЬ" AT 50,50
SPRITE END
SPRITE n$ AT maxx/2,maxy/2
SPRITE n$ DELAY 0.03
SPRITE n$ DA 1
SPRITE n$ LOOP
SPRITE n$ SHOW
LOOP:
GET SPRITE n$ ANGLE z
GET TOUCH 0 AS x,y
GET SPRITE n$ POS x1,y1
IF x>0 AND ((x>x1-w/2 AND x<x1+w/2) AND (y>y1-h/2 AND y<y1+h/2)) THEN
SPRITE n$ AT x,y ANGLE z
ELSE
GOSUB 1
ENDIF
GOTO LOOP
1 FIELD "nomer" TEXT "Мимо" AT maxx/2,0 SIZE 70,25
FIELD "nomer" BACK COLOR 0,0,0
FIELD "nomer" FONT COLOR 1,1,1
RETURN
- Attachments
-
- image.png (236.76 KiB) Viewed 3872 times
Re: Мне нужна помощь с изучением синтаксиса.
Mark99, я Понял, спасибо.
Но тут появляется такая вещь. Если я делаю как Фант написал, то спрайт когда быстро двигаешь, притормаживает. Но за то когда мимо жмёшь, включается подпрограмма. А как ты мне написал, спрайт можно быстро двигать, но подпрограмма сразу включается.
Но тут появляется такая вещь. Если я делаю как Фант написал, то спрайт когда быстро двигаешь, притормаживает. Но за то когда мимо жмёшь, включается подпрограмма. А как ты мне написал, спрайт можно быстро двигать, но подпрограмма сразу включается.
Re: Мне нужна помощь с изучением синтаксиса.
Mark99, если я так напишу:
IF x>0 AND ((x>x1 AND x<x1+w/2) AND (y>y1 AND y<y1+h/2))
То получится, что спрайт отвечать буде только на правое нижнее касание? Если да, то начинаю понимать
IF x>0 AND ((x>x1 AND x<x1+w/2) AND (y>y1 AND y<y1+h/2))
То получится, что спрайт отвечать буде только на правое нижнее касание? Если да, то начинаю понимать
Re: Мне нужна помощь с изучением синтаксиса.
Да+++Tantrixx wrote:Mark99, если я так напишу:
IF x>0 AND ((x>x1 AND x<x1+w/2) AND (y>y1 AND y<y1+h/2))
То получится, что спрайт отвечать буде только на правое нижнее касание? Если да, то начинаю понимать