大学の課題でスペース インベーダー ゲームを作成しています。私は紙の上でパーツを分解しています。開始するのに適した場所は、スプライトを画面上で移動させることだと思いました。私が現時点で抱えている問題はこれです.スプライトが画面の右側にあるとき、それはただ動き続けるので、私はこのコードを追加しました:
if (invadersSprite.getPosition().x > 650)
{
std::cout << "WIDTH_END" << std::endl;
}
私は基本的にこれを将来の参考のためにデバッグに使用しました。出力がコンソールにポップアップ表示されたので、何かに取り組んでいることがわかりました。そこで、出力から実際にスプライトを画面の左側に戻す作業に移りました。私は今、予想以上の問題を抱えています。
コードを読みやすくするために、上、左、右、下の int をいくつか宣言しました。
int spriteWalkSpeed = 50;
int up=-spriteWalkSpeed, down=spriteWalkSpeed, left=-spriteWalkSpeed, right=spriteWalkSpeed;
SFML の移動コマンドと setPosition を使用してみましたが、思ったほど機能しませんでした。
動く:
私がこれで抱えていた問題は、基本的に画面の真ん中で止まることです。脚の動きなどはアニメートされますが、左右には動きません。
if (invadersSprite.getPosition().x > 650)
{
invadersSprite.move(left, 00);
}
セット位置:
これは私が求めているものに少し近いですが、まだ葉巻はありません. 動きは約 1 秒間停止し、画面の左側にポップアップ表示されます。必要なのは、画面を下に移動することです。
if (invadersSprite.getPosition().x > 650)
{
invadersSprite.setPosition(left, 00);
}
私はSFMLを長い間使用していないので、これには少し困惑しています。
編集
現在、スプライトは必要に応じて画面の右側に移動しています。
if(spriteTimer>delay)
{
invadersSprite.setTextureRect(area);
++count;
invadersSprite.move(right,0);
if(count==SPRITECOLS) //WE HAVE MOVED OFF THE RIGHT OF THE IMAGE
{
area.left=0; //reset texture rect at left
count=0; //reset count
}
else
{
area.left+=spaceWidth; //move texture rect right
}
spriteTimer=0; //we have made one move in the sprite tile - start timing for the next move
}