3

序章

私は過去にこの問題に関するスレッドを作成しました。このフォーラムで他のユーザーの助けを借りてコードを修正するのに長い時間を費やした後、私はまだ開始した場所と同じ場所にいるので、別のアプローチを取っています。

私がしたいこと

私はあなたに私のゲームを作るように頼むつもりはないので、私のゲームのすべてのコードを投稿する代わりに、メイン クラスとゲーム クラスの 2 つのクラスしか持たない、非常によく似た非常に単純なバージョンのゲームを作成しました。私が提供している単純なコードは何ですか: 2 つの四角形とキーボード入力による動きの 1 つがあります。それは背景も画像もアニメーションもコードもほとんどありません。

私の問題/私の質問

私がゲームで抱えている問題は衝突です。この例では2つの長方形です。ゲームにコードを追加して、1つの長方形が他の長方形と交差するのを止める必要があります。多くのチュートリアル、この問題に関する多くのガイドを見てきましたこのフォーラムのユーザーがこの問題を解決するのを手伝ってくれることを願っています。

コード

上で述べたように、このゲームには 2 つのクラスしか必要としないコードが非常に少ないため、必要に応じて 2 つのクラス (ゲームとプレイ) を作成し、このゲームをコンピューターで実行できます。このコードを使用する前に、コンパイラでスリックを設定する必要があることに注意してください。

メインクラス(ゲーム)

package javagame;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

public class Game extends StateBasedGame{

    public static final String gamename = "Ham Blaster! 2.0";

    public static final int play = 1;

    public Game(String gamename){//create window on statup
        super(gamename);//adds title to screen
        this.addState(new Play(play));
    }

    public void initStatesList(GameContainer gc) throws SlickException{

        this.getState(play).init(gc, this);
        }

    public static void main(String[] args) {
        AppGameContainer appgc;//the window for your game
        try{
            appgc = new AppGameContainer(new Game(gamename));
            appgc.setDisplayMode(640, 360,false);
            appgc.start();
        }catch(SlickException e){
        e.printStackTrace();}
    }}

プレイクラス

    package javagame;

import java.awt.Rectangle;

import org.newdawn.slick.Animation;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Play extends BasicGameState{

    Animation bucky, movingUp, movingDown, movingLeft, movingRight;
    Image worldMap;
    boolean quit = false;//gives user to quit the game
    int[] duration = {200, 200};//how long frame stays up for
    int buckyPositionX = 0;
    int buckyPositionY = 0;
    int shiftX = buckyPositionX + 320;//keeps user in the middle of the screem
    int shiftY = buckyPositionY + 160;//the numbers are half of the screen size

    Rectangle rectOne = new Rectangle(shiftX, shiftY,90,90);
    Rectangle rectTwo = new Rectangle(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);

    public Play(int state){
    }   
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
    }


    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{


    g.fillRect(shiftX, shiftY,90,90);
    g.fillRect(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);
    }


    public void update(GameContainer gc, StateBasedGame sbg, int delta)throws SlickException{
    Input input = gc.getInput();

    //up
    if(input.isKeyDown(Input.KEY_UP)){buckyPositionY += 2;}

    //down
    if(input.isKeyDown(Input.KEY_DOWN)){buckyPositionY -= 2;}
    //left
    if(input.isKeyDown(Input.KEY_LEFT)){buckyPositionX += 2;}
    //right
    if(input.isKeyDown(Input.KEY_RIGHT)){buckyPositionX -= 2;}
}   


    public int getID(){
        return 1;
    }
}

追加情報が必要な場合はお知らせください。できるだけ早く返信いたします。

4

1 に答える 1

0

フレームワークについてはあまり詳しくありませんが、プリミティブ型は、2つのオブジェクトが互いに衝突するかどうかを判断するためのintersects()メソッドを提供することを理解しています。手動で呼び出すか、オブジェクトを登録して自動的に実行できるコンポーネントを見つける必要があります。

于 2013-02-19T00:26:26.273 に答える