タイトルがこの投稿をこれまで以上に混乱させていないことを願っています. 私がこれまでに行ったことを正確に伝えると、私が抱えている問題をよりよく説明できるかもしれません。
ゲーム
私は非常に単純な 2D ゲームを作成しました。基本は、プレーヤーがキーボード入力 (上、下、左、右矢印) で 2D マップを移動することです。このゲームは、ビューが上からあるポケモン ビューのようなものです。この速度は、キーボード入力ごとに次のコードを使用するだけで設定できます。
if(input.isKeyDown(Input.KEY_DOWN)){
bucky = movingDown;
buckyPositionY -= 2;
if(buckyPositionY<-550){//this is used to stop player from leaving the map
buckyPositionY += 2;}}
他の 3 つのキーボード入力についても同じことが行われます。
問題
プレイヤーが動き回れるゲームを作成しましたが、問題はマップ上にオブジェクトがあり、その瞬間にプレイヤーがそれらを通り抜けるだけなので、衝突を設定する必要があります。長方形を使用して衝突を設定する方法を知っていますメソッドですが、問題は実際に長方形を作ることです。簡単な作業であることはわかっていますが、このゲームでは Rectangle を下に置くと、プレーヤーを移動すると移動します。次のコードで四角形を描画して、これをテストしました。
g.fillRect(0,0,100,100);
これは、マップ上の障害物の座標です。長方形を描画すると、画面の左上隅に表示され、プレーヤーを移動すると、そこにとどまります (左上隅にとどまるように移動し続けます)。私の長方形が動いている場合、私の衝突はどのように機能するはずなので、私にとって大きな問題です。これが起こっている理由は、私のマップが非常に大きいためだと思います。つまり、完全なものを表示するのではなく、プレーヤーを画面の中央に配置し、プレーヤーが移動すると、画面も一緒に移動して残りの部分を表示するためです。地図。
コード
これが私のゲームクラスのコードです。これにはrender、init、updateなどのメソッドがありますが、この問題を修正するために必要なコードはrenderメソッドと変数だけだと思うので、ここにあります(完全なコードが必要な場合)教えてください)
変数
Animation bucky, movingUp, movingDown, movingLeft, movingRight
Image worldMap;
boolean quit = false;
int[] duration = {200, 200};
int buckyPositionX = 0;
int buckyPositionY = 0;
int shiftX = buckyPositionX + 320;
int shiftY = buckyPositionY + 160;
render メソッド
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
worldMap.draw(buckyPositionX, buckyPositionY);//position 0,0
bucky.draw(shiftX, shiftY);//makes him appear at center of map
if(quit==true){
g.drawString("Resume(R)", 250, 100);
g.drawString("Main(M)", 250, 150);
g.drawString("Quit Game(Q)", 250, 200);
if(quit==false){
g.clear();
}}}
このスレッドが非常に長くなって申し訳ありませんが、時間を割いて私を助け、私の質問に答えていただければ幸いです。
ありがとうございました。