1

弾むボールがあり、一度弾むとスピードが速くなるように作ってみました。

私のボールクラスでは、float speed;

そして私はそれを初期化しました: public ball(float speed) speed = 1f;

次のようなボールの動きの方法があります。

public void BallMovement()
{
    if (movingUp) { ballRect.Y -= speed; }//Error
    if (!movingUp) {  ballRect.Y += speed; }//Error
    if (movingLeft) {  ballRect.X -= speed; }//Error
    if (!movingLeft) {  ballRect.X += speed; }//Error

    if (ballPosition.Y < 85)
    {
        movingUp = false;
    }
    if (ballPosition.Y >= 480)
    {
        movingUp = true;
    }

次に、これを update メソッドに追加します。BallMovement();

速度変数を使用しようとする前は機能していましたが、このエラーのためにコンパイルされません:

タイプ 'float' を 'int' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)

4

4 に答える 4

1

するspeed必要がありますfloatか?そうでない場合は、作成できます

int speed;

または、明示的なキャストを使用します

if (movingUp) { ballRect.Y -= (int)speed; }// No Error
于 2013-07-29T21:52:21.347 に答える
1

おそらくspeedtype として宣言されていfloatます。

次のように速度を浮動小数点から整数に変換することで計算できます。

public void BallMovement()
{
    int speedInt = Convert.Int32(speed);

    if (movingUp) { ballRect.Y -= speedInt; }
    if (!movingUp) {  ballRect.Y += speedInt; }
    if (movingLeft) {  ballRect.X -= speedInt; }
    if (!movingLeft) {  ballRect.X += speedInt; }

    if (ballPosition.Y < 85)
    {
        movingUp = false;
    }
    if (ballPosition.Y >= 480)
    {
        movingUp = true;
    }
    ....

一方、コンパイラーに (複数回) 変換させたい場合は、 で参照するたびにキャストすることができspeedます(int)speed

于 2013-07-29T21:46:34.817 に答える
1

int (例: 12) から float 値 (例: 1.223488) を減算しようとしています。これはできません。両方の値を float に変換 (キャスト) するか、両方の値を int に変換 (キャスト) します。

 if (movingUp) { ballRect.Y -= (int)speed; }//Error

エラーは基本的に、「これを自動的に変換することはできませんが (暗黙的)、自分で変換できます (明示的)」と言っています。型キャストに関する MSDN の記事をチェックしたいと思います: http://msdn.microsoft.com/en-us/library/ms173105.aspx

于 2013-07-29T21:46:36.447 に答える