這本書全網連個答案都沒有,這本書就這麼冷門嗎?
2.7.1 略
2.7.2
支持多組動畫,增加一組角色
// ----------------------------------------------------------------
// From Game Programming in C++ by Sanjay Madhav
// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
//
// Released under the BSD License
// See LICENSE in root directory for full details.
// ----------------------------------------------------------------
#include "Human.h"
#include "AnimSpriteComponent.h"
#include "Game.h"
Human::Human(Game* game)
:Actor(game)
{
// Create an animated sprite component
AnimSpriteComponent* asc = new AnimSpriteComponent(this);
std::vector<SDL_Texture*> anims = {
game->GetTexture("Assets/Character01.png"),
game->GetTexture("Assets/Character02.png"),
game->GetTexture("Assets/Character03.png"),
game->GetTexture("Assets/Character04.png"),
game->GetTexture("Assets/Character05.png"),
game->GetTexture("Assets/Character06.png"),
game->GetTexture("Assets/Character07.png"),
game->GetTexture("Assets/Character08.png"),
game->GetTexture("Assets/Character09.png"),
game->GetTexture("Assets/Character10.png"),
game->GetTexture("Assets/Character11.png"),
game->GetTexture("Assets/Character12.png"),
game->GetTexture("Assets/Character13.png"),
game->GetTexture("Assets/Character14.png"),
game->GetTexture("Assets/Character15.png"),
game->GetTexture("Assets/Character16.png"),
game->GetTexture("Assets/Character17.png"),
game->GetTexture("Assets/Character18.png"),
};
asc->SetAnimTextures(anims);
}
是否循環
//是否循環
bool IsLoop;
void AnimSpriteComponent::Update(float deltaTime)
{
if (!IsLoop&&mCurrFrame>=mAnimTextures.size())
{
return;
}
SpriteComponent::Update(deltaTime);
// Update the current frame based on frame rate
// and delta time
mCurrFrame += mAnimFPS * deltaTime;
// Wrap current frame if needed
if (!IsLoop&&mCurrFrame >= mAnimTextures.size())
{
return;
}
else {
while (mCurrFrame >= mAnimTextures.size())
{
mCurrFrame -= mAnimTextures.size();
}
}
// Set the current texture
SetTexture(mAnimTextures[static_cast<int>(mCurrFrame)]);
}
2.7.3
做不出來