Robokot
YYEEEE!
Реализовал управление:
MoveForward
MoveBackward
MoveLeft
MoveRight
Написал простенького ботокота для примера:
Initialize(1,255,255,255,"baton4ik")
if not a then a=0 end
a=a+1
if a<50 then MoveBackward() else
if not b then b=0 end
b=b+1
if b>30 then
b=0
c=Random(1,2)
end
if c==1 then MoveLeft() else MoveRight() end
end
В течении 50 кадров едет вниз, выбирает рандомное направление и едет, через 30 кадров снова выбирает рандомное направление и т.д.
А теперь пойду кодить :)
- 28 ноября 2010, 18:14
- 00
Наверное пытался нас удивить гениальностью своей мысли?
Не получилось
Нет, а зачем столько злобы?
Я пишу дневник разработки.
будет двигаться в 4-х направлениях? *печаль*
сделайте хотя бы 8...
Ничего не мешает написать
MoveRight()
MoveForward
И кот полетит по диагонали ;)
я думал, что действия отменяют друг друга. тогда что будет, если написать
MoveForward()
MoveBackward() ?
будет стоять и ждать, пока его расстреляют?
Да. Это даёт больше возможностей и мотивирует уделять коду больше внимания.
можно сделать две переменные - speed и direction
Есть. Только скорость, разумеется, менять нельзя (хотя, в принципе, можно разрешить менять значение с 1 до 3). Угол поворота на направление движения не влияет, как ты не повернись, MoveForward() всегда будет двигать тебя "вверх"
под direction я имел в виду как раз направление движения. вызов функции:
moveSet (speed,direction);
и всё путём ;) в теле функции можно и ограничить скорость. причём ничего не мешает оставить остальные функции - либо как частный случай, либо как есть.
Спасибо за рекомендации! Если возьмусь за direction, то в конце, потому что сложно реализовать движение в стороны (для каждого направление (вперед, назад, влево, вправо) надо для каждого промежутка direction
рассчитывать скорость по x и y).
А на деле оно не часто пригодится, т.к. 8 направлений обычно хватит за глаза, но при движении относительно глобальных координат игроку будет намного легче рассчитывать нужный поворот (это важно, т.к. кот може сканировать/стрелять только вперёд)
хм. а разделить скорость на две, к примеру, xspeed и yspeed, по теореме Пифагора?
xspeed = speed*cos(direction)
yspeed = speed*sin(direction)
Тогда по диагонали движение будет медленнее, чем по вертикали и горизонтали, не так ли?
Расстояние будет пройдено то же. Все точки на
единичнойокружности радиуса speed же)Ну это да.
А в Морровинде и CS мне больше нравилось полу-боком бегать из-за прибавки к скорости :D
И в Мор.Утопии тоже по-диагонали быстрее ходишь:)
Каким боком 2D к 3D?)
Я имел ввиду передвижение в XY-плоскости, что то же 2D, по сути)
Именно так у меня и сделано :)
Но это только движение вперёд.
Напиши-ка формулы для движения влево и вправо, учитывая то, что sin(0)=0 и sin(a)=sin(180-a) (и аналогично для косинусов) ;)
MoveRight:
direction+=90;
xspeed = speed*cos(direction);
yspeed = speed*sin(direction);
MoveLeft:
direction-=90;
xspeed = speed*cos(direction);
yspeed = speed*sin(direction);
MoveBackward:
direction+=180;
xspeed = speed*cos(direction);
yspeed = speed*sin(direction);
не вижу трудности
Я знаю :) Аналогично!=Так же
хм... Да, правда.
Вперёд:
xspeed = speed*cos(direction);
yspeed = speed*sin(direction);
Влево:
xspeed = speed*cos(direction-90);
yspeed = speed*sin(direction-90);
...
Спасибо!
обращайтесь ;)
Готово, реализовал MoveLocalForward, MoveLocalLeft и т.д. Начинаю работать над другими функциями (Turn(), SetSpeed() и проч.)
Так держать!)