Я пытаюсь создать простую футбольную игру, включая штрафные удары, в которых я должен анимировать мяч от игрока до поста ворот ... раньше я использовал простые анимации, используя таймер для добавления к оси изображения шара, так что он перемещается от одной точки к другой .. но у меня не было желаемого результата, так как анимации были не такими гладкими ... Так что я думал об использовании игрового ядра ... Так как я Новый программист я не имею ни малейшего представления об игровом движке, и я также не могу найти подходящую документацию относительно таких двигателей, как box2d или бурундуки или воробей ..i также думал об использовании UIView animations вместо более ранних анимаций, так как я думаю, что можно добиться гораздо лучших анимаций, не царапая мою голову, пытаясь работать на игровом движке ... Я не собираюсь ни с кем, так что было бы действительно здорово, если бы кто-то мог осветить эта проблема моя ???Разработка простой игры без использования игровых движков?
ответ
Использование UIView анимации, как в:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3]; // or whatever time
object.center=CGPointMake(object.center.x+2, object.center.y+4);
// or whatever
[UIView commitAnimations];
Вы должны также использовать NSTimer с тем же интервалом, так что вы можете вызвать анимации гладко.
NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:0.3 target: self
selector:@selector(animation) userInfo: nil repeats: YES];
Затем реализовать метод:
- (void)animation {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3]; // or whatever time
object.center=CGPointMake(object.center.x+5, object.center.y+7);
// or whatever
[UIView commitAnimations];
}
Это должно сделать для любой простой игры.
NSTimers прилагают все усилия, но не являются точными, когда таймер уволен, вы должны записать текущее время в переменной и зачитанное в предыдущее время. используйте эти два раза, чтобы получить delta.if вы хотите переместить что-то 5 кадров каждые 0,3 секунды, вы бы использовали 5/0,3 * дельта для расчета расстояния. – MCannon
На самом деле этого никогда не делаю, потому что NSTimers, хотя они могут быть запущены поздно (речь идет о очень немногих миллисекундах здесь, если вы - приложение с эффективностью памяти), они будут точно срабатывать.Никогда не изменяйте расстояние при использовании повторяющегося таймера. – GSchv
Как вы отметили вопрос cocos2d
, я думаю, вы используете его или планируете. Анимация CCSprites
проста, как вы можете видеть, например. в этой игре https://github.com/haqu/tweejump.
В вашем onEnter
реализации, просто вызовите [само scheduleUpdate]
это будет вызывать постоянно является update:
, где вы можете сделать ваш рисунок
- (void)update:(ccTime)dt {
ball_pos.x += ball_velocity.x * dt;
ball_pos.y += ball_velocity.y * dt;
ball_velocity.x += ball_acc.x * dt;
ball_velocity.y += ball_acc.y * dt;
//game logic goes here (collision, goal, ...)
ball.position = ball_position;
}
Это будет обрабатывать плавное движение мяча. ball_pos
, ball_velocity
и ball_acc
является vvCertex2F
.
Вам, вероятно, даже не нужно иметь дело с ускорением и давать импульс только мячу, когда кто-то ударил его (то есть ударил скорость).
Возможно, вам также потребуется некоторое затухание, чтобы замедлить движение мяча. вы делаете это, уменьшая скорость на каждом шагу
Вот ** ** box2d ** engine ** manual: http://www.box2d.org/manual.html ... В каких ** направлениях ** это не правильно ** документация **? – FrustratedWithFormsDesigner
Если вы не используете игровой движок, вам нужно будет реализовать то, что двигатели игр делают под капотом. Это будет сложнее, чем использование игрового движка, если вы не знаете, что вы делаете довольно хорошо с графикой, вводом и т. Д. – LarsH