Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 27.11.2010, 17:34   #1
WhiteBlack
Нуждающийся
 
Регистрация: 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
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 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(1End
Forever 
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 17:55   #3
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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
WhiteBlack
Нуждающийся
 
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: плавное перемещение по одному нажатию

я пробовал ставил
flip
cls 
в цикле это почему то ни на что не влияет (единственное перестал тормозить во время этого перемещения, т.е. я могу еще при этом двигать камеру)

Taugeshtu, извини я что то никак не допру, ты предлагаешь передвигать в главном цикле, если включен таймер, таймер включается нажатием на клавишу, а выключается по окончании перемещения, я правильно понял да, если так, то спасибо сейчас попробую
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 18:48   #5
WhiteBlack
Нуждающийся
 
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: плавное перемещение по одному нажатию

вот сделал так
flag=0
   
........
repeat
.....
If 
KeyHit(205flag=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 00
        
EndIf    
        If 
oldX+20=EntityX(cubes(1)) Then     
            flag
=0
        
EndIf    
    EndIf
End Function 
теперь по нажатию вообще ничего не происходит, блин, где ошибка
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 18:51   #6
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: плавное перемещение по одному нажатию

WhiteBlack, учите основы, почитайте уроки и все получится.
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 18:55   #7
WhiteBlack
Нуждающийся
 
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: плавное перемещение по одному нажатию

Сообщение от Nex Посмотреть сообщение
WhiteBlack, учите основы, почитайте уроки и все получится.
обязательно почитаю, но у меня совсем не времени, нужно сделать за пару дней, если не трудно объясните как это сделать, и почему мой код не работает, ведь все вроде правильно
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 19:07   #8
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений
(для 2,526 пользователей)
Ответ: плавное перемещение по одному нажатию

если переменную не обьявлять глобальной то она на каждый цикл будет обнулятся

если oldX=EntityX(cubes(1)) прописать в функции после If flag=1 то oldX будет постоянно присваивать измененное значение, т.е. его нужно определить один раз во время нажатия кнопки

еще можно упростить оператор if с помщью else

global flag=
global oldX
   
........ 
repeat 
..... 
If 
KeyHit(205flag=: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
       
else
          
flag=
       
EndIf     
    EndIf 
End Function 
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 19:24   #9
WhiteBlack
Нуждающийся
 
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: плавное перемещение по одному нажатию

pepel, блин спасибо, что то я про это забыл
теперь он почему то не останавливается после 20 единиц перемещения
странно, объявил как глобальную перемещение стоит по 0.5, значит через 40 циклов должен остановиться вроде
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 19:29   #10
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 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
WhiteBlack
Нуждающийся
 
Регистрация: 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
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: плавное перемещение по одному нажатию

<> - не равно
< - меньше
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 19:41   #13
WhiteBlack
Нуждающийся
 
Регистрация: 11.07.2010
Сообщений: 61
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: плавное перемещение по одному нажатию

Сообщение от baton4ik Посмотреть сообщение
<> - не равно
< - меньше
спасибо большое за объяснения, это я знаю
у меня была идея пока не равно двигается, как только стало равным прекращается
(Offline)
 
Ответить с цитированием
Старый 27.11.2010, 21:02   #14
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: плавное перемещение по одному нажатию

Вообще не целочисленные переменные сравнивать надо с погрешностью, а не простым "=" или "<>" т.к. они не точные.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
ABTOMAT (28.11.2010), pepel (27.11.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com