|
27.11.2010, 17:34
|
#1
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
плавное перемещение по одному нажатию
вобщем нужно по команде
KeyHit()
переместить объект на 20 единиц вправо, чтобы при этом он двагался плавно, то есть видно было движение на каждую единицу
пробовал цикл - он просто перемедается в конечный пункт
делал задержку Delay - тоже самое
пробовал так
<code>
for i=1 to 21
old=Millisecs()
while Millisecs()-old<300
wend
translateentity entity, 1, 0, 0
next
</code>
но и так не катит, подскажите плиз
|
(Offline)
|
|
27.11.2010, 17:50
|
#2
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: плавное перемещение по одному нажатию
так чтоли?
Graphics 640,480,16,2 SetBuffer BackBuffer () Local x#,y#,dx#,dy#,mx#,my#,x1#,y1# Repeat mx=MouseX() my=MouseY() x=x+(mx-x1)/22 y=y+(my-y1)/22 x1=x/2+x1 y1=y/2+y1 x=x*.8 y=y*.8 Rect x1,y1,6,6 Flip:Cls:If KeyDown(1) End Forever
|
(Offline)
|
|
27.11.2010, 17:55
|
#3
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: плавное перемещение по одному нажатию
Учимся понимать логику программы:
Цикл выполняется итерация за итерацией , и лишь затем следует выход из цикла.
Если у тебя в цикле нет отрисовки (рендера) - то изменений в течение цикла ты не увидишь.
Решение: ввести переменную-таймер, и в главном цикле программы (где есть отрисовка) сравнивать текущее время и таймер.
Конкретнее: при нажатии кнопки переменная-таймер устанавливается на значение "текущее время + 2 секунды"; в цикле проверяется условие "если текущее время меньше, чем в переменной-таймере", и в теле этого условия лежит смещение объекта.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
27.11.2010, 18:32
|
#4
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: плавное перемещение по одному нажатию
я пробовал ставил
в цикле это почему то ни на что не влияет (единственное перестал тормозить во время этого перемещения, т.е. я могу еще при этом двигать камеру)
Taugeshtu, извини я что то никак не допру, ты предлагаешь передвигать в главном цикле, если включен таймер, таймер включается нажатием на клавишу, а выключается по окончании перемещения, я правильно понял да, если так, то спасибо сейчас попробую
|
(Offline)
|
|
27.11.2010, 18:48
|
#5
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: плавное перемещение по одному нажатию
вот сделал так
flag=0 ........ repeat ..... If KeyHit(205) flag=1 TurnTopCubes() ..... until keyhit(1) Function TurnTopCubes() If flag=1 Then oldX=EntityX(cubes(1)) If oldX+20<>EntityX(cubes(1)) Then TranslateEntity cubes(1), .5 , 0, 0 EndIf If oldX+20=EntityX(cubes(1)) Then flag=0 EndIf EndIf End Function
теперь по нажатию вообще ничего не происходит, блин, где ошибка
|
(Offline)
|
|
27.11.2010, 18:51
|
#6
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: плавное перемещение по одному нажатию
WhiteBlack, учите основы, почитайте уроки и все получится.
|
(Offline)
|
|
27.11.2010, 18:55
|
#7
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: плавное перемещение по одному нажатию
Сообщение от Nex
WhiteBlack, учите основы, почитайте уроки и все получится.
|
обязательно почитаю, но у меня совсем не времени, нужно сделать за пару дней, если не трудно объясните как это сделать, и почему мой код не работает, ведь все вроде правильно
|
(Offline)
|
|
27.11.2010, 19:07
|
#8
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: плавное перемещение по одному нажатию
если переменную не обьявлять глобальной то она на каждый цикл будет обнулятся
если oldX=EntityX(cubes(1)) прописать в функции после If flag=1 то oldX будет постоянно присваивать измененное значение, т.е. его нужно определить один раз во время нажатия кнопки
еще можно упростить оператор if с помщью else
global flag=0 global oldX ........ repeat ..... If KeyHit(205) flag=1 :oldX=EntityX(cubes(1)) TurnTopCubes() ..... until keyhit(1) Function TurnTopCubes() If flag=1 Then ; If EntityX(cubes(1))<oldX+20 Then TranslateEntity cubes(1), .5 , 0, 0 else flag=0 EndIf EndIf End Function
|
(Offline)
|
|
27.11.2010, 19:24
|
#9
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: плавное перемещение по одному нажатию
pepel, блин спасибо, что то я про это забыл
теперь он почему то не останавливается после 20 единиц перемещения
странно, объявил как глобальную перемещение стоит по 0.5, значит через 40 циклов должен остановиться вроде
|
(Offline)
|
|
27.11.2010, 19:29
|
#10
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: плавное перемещение по одному нажатию
попробуй так:
If EntityX(cubes(1))<oldX+20
TranslateEntity cubes(1), .5 , 0, 0
else
flag=0
EndIf
|
(Offline)
|
|
27.11.2010, 19:34
|
#11
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: плавное перемещение по одному нажатию
Сообщение от pepel
попробуй так:
If EntityX(cubes(1))<oldX+20
TranslateEntity cubes(1), .5 , 0, 0
else
flag=0
EndIf
|
о спасибо заработало, наверно я полный нуб, потому что я не вижу разницы между
If oldX+20<>EntityX(cubes(1)) Then
и
If EntityX(cubes(1))<oldX+20
хотя да первый(мой) более тупой по условию
ну ладно всем большущее спасибо
|
(Offline)
|
|
27.11.2010, 19:37
|
#12
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений (для 1,962 пользователей)
|
Ответ: плавное перемещение по одному нажатию
<> - не равно
< - меньше
|
(Offline)
|
|
27.11.2010, 19:41
|
#13
|
Нуждающийся
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: плавное перемещение по одному нажатию
Сообщение от baton4ik
<> - не равно
< - меньше
|
спасибо большое за объяснения, это я знаю
у меня была идея пока не равно двигается, как только стало равным прекращается
|
(Offline)
|
|
27.11.2010, 21:02
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: плавное перемещение по одному нажатию
Вообще не целочисленные переменные сравнивать надо с погрешностью, а не простым "=" или "<>" т.к. они не точные.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:39.
|