Мультимедийные возможности с++


Анимация движения персонажей


Download 143.59 Kb.
bet2/5
Sana17.06.2023
Hajmi143.59 Kb.
#1530379
1   2   3   4   5
Bog'liq
Информатика

1.Анимация движения персонажей
Для начала при создании платформера на языке C++ необходимо продумать, как будет прорисовываться анимация персонажей Tails и Mario, соответственно, так как именно они в платформере передвигаются. Для этого используется быстрый перебор тайлов, который и приводит к иллюзии движения персонажей:

Рисунок 1 – Тайлсеты для создания анимации движения персонажей
На языке С++ код имеет такой вид:
void update(float time)
{
control();
switch (state) {
case right:dx = speed; break;
case left:dx = -speed; break;
case up: break;
case down: dx = 0; break;
case stay: break;
}
x += dx*time;
checkCollisionWithMap(dx, 0);
y += dy*time;
checkCollisionWithMap(0, dy);
sprite.setPosition(x + w / 2, y + h / 2);
dy = dy + 0.0015*time;
currentFrame += time * 0.005;
if (currentFrame > 7) currentFrame -= 7;
if (dx>0) sprite.setTextureRect(IntRect(0 + 45 * int(currentFrame), 140, 45, 32));
}
Где sprite – это вырезанная из Тайлсета текстура с размерами 45*32, при этом начальная координата задана x=0, y=45; затем если sprite меняется на тайл с координатами 0, 90, затем 0,135, а затем дойдя до 7 тайла, он как видно из этого кода ”if (currentFrame > 7) currentFrame -= 7;” снова начинает перебирать тайлы c самого сначала, таким образом, создается иллюзия движения персонажа. При желание можно за место данного тайлсета использовать какой-нибудь более качественный и современный тайлсет, эффект движения при этом значительно улучшится.
Однако персонаж должен уметь двигаться не только вправо, но и как минимум влево, для этого необходимо лишь добавить следующую строчку кода if (dx<0) sprite.setTextureRect(IntRect(0 + 45 * int(currentFrame) + 45, 140, -45, 32)); и спрайты попросту буду зеркально отражаться при движение вправо.
Далее необходимо прописать код, описывающий то, как мы будет управлять движение персонажа:
void control(){
if (health > 0) {
if (Keyboard::isKeyPressed){
if ((Keyboard::isKeyPressed(Keyboard::Left))) { state = left; speed = 0.1; }…
То есть при нажатие на клавишу Left, персонаж начинает двигаться влево и при этом создается иллюзия его передвижения. Аналогично можно прописать код для действий при нажатии прочих клавиш. Анимация Mario была прописана аналогично.

Download 143.59 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling