0

発射している銃の位置から弾丸を発射しようとしています。したがって、マウスを動かすと、銃はある方向に動きます。弾丸が銃の向いている方向に移動するようにします。だから、どの方向にも発砲できる。

turntowards()メソッドを使ってみました。しかし、弾丸は、画面が回転しているにもかかわらず、画面の右側にしか発射されません。

助言がありますか?

私は文字クラスを持っています:

import greenfoot.*;  

public class Gun extends Actor
{
    private int speed;
    public void act() 
    {
        // Add your action code here.
        MouseInfo mouse = Greenfoot.getMouseInfo();
        if (mouse !=null)
            setRotation((int)(180*Math.atan2(mouse.getY()-getY(),mouse.getX()-getX())/Math.PI));
            move(speed);

            if(Greenfoot.mouseClicked(null))
            {
                getWorld().addObject(new bullet(getRotation()),getX(),getY());
                turnTowards(mouse.getX(), mouse.getY());

            }

    } 

}

私は弾丸クラスを持っています:

import greenfoot.*;  

public class bullet extends Actor
{
    private int direction;

    public void act() 
    {

        setLocation(getX()+5,getY());

    }    
    public bullet(int dir)
    {
        this.direction=dir;
    }
}

そして、私は悪役クラスを持っています:

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class balloon here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class baddie extends Actor
{

    public void act() 
    {

        setLocation(getX(), getY()-1);

    }    

}
4

1 に答える 1

1

問題は、bullet::act メソッドが期待どおりに動作しないことです。方向に従うのではなく、弾丸を右に移動するだけです (act が呼び出されるたびに x 軸に +5 を追加します)。PS: bullet::act がゲームループで呼び出しているメソッドであると想定しています。

あなたの方向は、角度をラジアンで表す整数値ですよね? 方向を 2D ベクトルとして表現し、それに従って弾丸を移動する方がよいでしょう。これは、方向と速度の両方を単一の速度ベクトルとして表現できるためです。これに役立ついくつかの興味深い参考文献: http://natureofcode.com/book/chapter-1-vectors/およびhttp://www.red3d.com/cwr/steer/ (特にシーク動作)。

乾杯ルイス

于 2013-10-29T16:33:31.060 に答える