簡體   English   中英

我需要幫助才能在Java平台游戲中創建碰撞系統

[英]I need help creating a collision system in a java platforming game

我正在使用處理程序來創建一個簡單的平台游戲,需要幫助,以找出讓玩家角色與平台互動的方法,尤其是讓他們站在平台之上。

我曾嘗試將玩家與平台互動時的速度設置為零,但在嘗試進入平台頂部時會產生問題,玩家會沉沒其中而不是停留在頂部。

    public void setup() {
        background=loadImage("Sprites/Test Background-1.png.png");
        playerSprite= new AnimatedSprite("Idle animation", 8);
        blocks[0]= new BlockCollision();
        blocks[0].Sprite = loadImage("Sprites/Platform Small-1.png.png" );
        blocks[0].x = 250;
        blocks[0].y = 250;
        blocks[0].width = 64;
        blocks[0].height= 64;
        blocks[1]= new BlockCollision();
        blocks[1].Sprite = loadImage("Sprites/Platform Small-1.png.png" );
        blocks[1].x = 0;
        blocks[1].y = 0;
        blocks[1].width = 64;
        blocks[1].height = 64;
        blocks[2]= new BlockCollision();
        blocks[2].Sprite = loadImage("Sprites/Platform Small-1.png.png");
        blocks[2].x = 300;
        blocks[2].y = 400;
        blocks[2].width = 64;
        blocks[2].height = 64;

    }
    public void settings() {
        size (500, 500);
    }
    public void draw() {
        background(background);
        if(grounded==false){
            playerVelocity.y += 1;
        }
        playerPosition.x +=
                playerVelocity.x;
        playerPosition.y +=
                playerVelocity.y;
        if (playerPosition.y > 468) {
            playerPosition.y = 468;
            playerVelocity.y = 0;
            jumpAmount=0;
        }
        playerSprite.animate
                (playerPosition.x, playerPosition.y);
            //checks for if it touches any side of the platform
        if(playerPosition.y+ playerDimensions>= blocks[0].y
                && playerPosition.x+ blockDimensions>=blocks[0].x
                &&playerPosition.y<=blocks[0].y+blockDimensions
                && playerPosition.x<=blocks[0].x){
//sets velocity to zero to ensure that any other interaction with the platform works
            playerVelocity.x=0;
            playerVelocity.y=0;

            if(playerPosition.y+ blockDimensions<=blocks[0].y){
                grounded=true;
            }
            else grounded = false;
        }


        image(blocks[0].Sprite, blocks[0].x, blocks[0].y);
        image(blocks[1].Sprite,blocks[1].x,blocks[1].y);
        image(blocks[2].Sprite,blocks[2].x,blocks[2].y);
    }

播放器本應仍固定在平台上,但播放器會沉沒。

一種解決方案是使用障礙矩陣,矩陣中填入0表示允許(移動),填入1表示不允許移動(如果到達則留在那里),矩陣大小可以反映屏幕尺寸,例如(800x600)。要使使用更加簡便,您可以假設1平方= 4x4像素,並將矩陣大小從(800x600)減小到(200x150)。

可以通過結合對象類型(地面,敵人,障礙物)檢查其他對象的某些矩形部分來完成其他解決方案。 基本上,所有對象都可以包裹在各種矩形形狀內(如果需要精確的碰撞,則可以更復雜)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM