1

学校でプロジェクトに取り組んでいますが、私はプログラミングの初心者で、バブルシューターの作成に大きな問題を抱えています.map2に変更する前に、マップのすべてのボールを取得する必要があります..

すべてのボールをリストして作成しようとしましたが、最初のマップの最後でプログラムがクラッシュし、負の値を読み込めないというエラー レポートが表示されます。私はそれが銃を装填しようとしていたときであり、「allowedBallTypes != null」またはゼロの場合、銃を装填する必要があるというifステートメントを入れたいと考えました。

シンボルが見つかりません - getAllowedBallTypes(); グリーンフット Java メソッド クラス

バブルワールド クラス:

public BubbleWorld() 
{    
        super(Map.MAX_WIDTH*Map.COLUMN_WIDTH, Map.MAX_HEIGHT*Map.ROW_HEIGHT, 1,false); 

        // Max speed. We use time-based animation so this is purely for smoothness,
        // because Greenfoot is plain stupid. I can't find a way to get 60 Hz so this is
        // what we have to do. Note: Exporting the game seems to cap this to some value < 100. :(
        Greenfoot.setSpeed(100);

        // Load the map.
        map = new Map(this, testMap1);

        // Update the allowed ball types. (i.e. we don't want to spawn a
        // certain color of balls if the map doesn't contain them!)
        map.updateAllowedBallTypes();

        // Create the cannon.
        Cannon cannon = new Cannon();
        addObject(cannon, getWidth()/2, getHeight());

マップ クラス:

       public int[] getAllowedBallTypes()
    {
        return allowedBallTypes;
    }


public void updateAllowedBallTypes()
    {
        int allowedCount = 0;
        boolean[] allowed = new boolean[Ball.typeCount];

        // Only ball types that exist in the map RIGHT NOW as attached balls will be allowed.
        for(Cell c : cells)
        {
            if(c != null && c.getBall() != null && c.isAttached())
            {
                int type = c.getBall().getType();

                if(!allowed[type])
                    allowedCount++;

                allowed[type] = true;
            }
        }

        allowedBallTypes = new int[allowedCount];
        int writeIndex = 0;
        for(int type = 0; type < Ball.typeCount; ++type)
        {
            if(allowed[type])
            {
                allowedBallTypes[writeIndex++] = type;
            }
        }
    }

大砲クラス:

private void prepareBall()
    {
        // Get a random ball type from the list of allowed ones. Only balls currently in the map
        // will be in the list.
        int[] allowedBallTypes = ((BubbleWorld)getWorld()).getMap().getAllowedBallTypes();
        int type = allowedBallTypes[Greenfoot.getRandomNumber(allowedBallTypes.length)];

        // Create it and add it to the world.
        ball = new Ball(type);
        getWorld().addObject(ball, getX(), getY());
    }
4

2 に答える 2

1

Cannonクラスの貼り付けられたスニペットでそのエラーが発生していると仮定すると、エラーは、BubbleWorldのgetMap()メソッドに問題があることを示しています。それを貼り付けて表示できますか?正しいタイプが返されない可能性があります。一般に、完全なクラスを含むより多くのコードを貼り付けて、エラーが発生した場所を正確に言う必要があります。より簡単な方法は、ソースコードを含むシナリオをgreenfoot Webサイト(www.greenfoot.org-Greenfootの共有機能を使用し、必ずソースコードボックスにチェックマークを付けてください)にアップロードし、そのリンクを提供することです。

于 2011-10-19T12:25:21.480 に答える
0

あなたのコードに基づいて、マップ クラスには int[] allowedBallTypes; のクラス レベルの変数宣言がないようです。

于 2011-10-18T16:53:44.060 に答える