1

ゲームの基本クラスの 3 番目と 4 番目の子であるこれらのクラスがあります。

/*
 * List of player states:

* * 通常 * 爆発 */

public class LocalPlayer extends MovingObjects{

//minus 1 laps to start to accommodate going over the start line for the first time
public int lapsCompleted = -1;      

public LocalPlayer(int localPlayerNumber) {

    /*
     * This line below and the variable localPlayerNumber will not be needed or will be different
     * if later on decide to do custom rocket designs - not needed for this stage but bear in mind if the decision is
     * made to go down that road this and the game object will have to be reconsidered as early as possible.
     */
    super(16, "assets/images/player" + localPlayerNumber , ".jpg", new Vector(373, 450 + (55 * localPlayerNumber))); 


}

//basic constructor just initialises MovingObjects Variables to zero values
public LocalPlayer(){
    super();
}

///// Uploading Position Methods

public void update(){
    if(objectState == "explode"){

    }
    if(objectState == "normal"){

        super.update();

        //look for edge of map and stop player leaving and reduce speed to 0
        if(position.x > rightEdge - icon.getIconWidth()){
            position.x = rightEdge - icon.getIconWidth();
            speed = 0;
        }else{
            if(position.x < leftEdge){
                position.x = leftEdge;
                speed = 0;
            }
        }

        if(position.y > downEdge - icon.getIconHeight()){
            position.y = downEdge - icon.getIconHeight();
            speed = 0;
        }else{
            if(position.y < upEdge){
                position.y = upEdge;
                speed = 0;
            }
        }
    }       
}

///// Movement Methods

//Increases speed
public void up(){
    if(speed == 0){
        speed = 2;// 2 is minimum speed to achieve all driving angles
    }else
    if(speed < 11){
        speed++;
    }
}

//Decreases speed
public void down(){
    if(speed > 2){
        speed--;
    }else{
        speed = 0;
    }
}

//Turns image and angle 22.5 degrees to the right
public void right(){
    if(angle == 337.5)
    {
        angle = 0;
        imageNumber = 0;
    }else{          
        angle = angle + 22.5;
        imageNumber = imageNumber + 1;
    }
}

//Turns image and angle 22.5 degrees to the left
public void left(){
    if(angle == 0)
    {
        angle = 337.5;
        imageNumber = 15;
    }else{          
        angle = angle - 22.5;
        imageNumber = imageNumber - 1;
    }
}   

// works out start grid currently only vertical lines
    //add more levels either start all the same way or needs updating
    public Vector getStartPos(int serverNumber, CheckPoints line)
    {
        int row ;
        Vector vReturn;
        if (serverNumber % 2 == 0) {
            // even
            row = serverNumber/2;

            //this needs some explaining:
            //vectorX  = row * width of image * gap to next player
            //vectorY = getline y and inset slightly(will see how goes)
            vReturn  =  new Vector((line.pos1.x + 10 ) - row * (50 + 10), line.pos1.y + 5);             
        } else {
            // odd
            row = (serverNumber + 1)/2;     
            vReturn  =  new Vector((line.pos2.x  +10) - row * (50 + 10), line.pos2.y - 55);             
        }           
            return vReturn;
    }
}

と:

 import java.awt.image.BufferedImage;


 public class NetworkedLocalPlayer extends LocalPlayer{

RocketSpecificServer server = new RocketSpecificServer();   

public NetworkedLocalPlayer(String ipAddress,int numOfImages,String filePre, String fileE, CheckPoints finishLine) {

    //sign player into server
    server.setUpNetwork(ipAddress); 

    LoadContent.gameSettings = (GameSettings) server.signIn();

    //get server number (needed for initialising)
    serverNumber = Integer.parseInt(((StringReturnSerial)server.getServerNumber()).s);

    //this is temp and should be changed later!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //filePre = filePre + serverNumber;
    filePre = filePre + 1;

    //Initialise image variables
    imageVariables(numOfImages,filePre,fileE);

    //work out pos
    position = getStartPos(serverNumber,finishLine);

    //get images
    initImageArray();

}

public void update(){
    //updates players info table checks the state of this object 
    //hasn't been changed by another player
    LoadContent.serverPlayerInfo =(PlayerPositionsSerial) server.getPos();
    objectState = LoadContent.serverPlayerInfo.playersArray[serverNumber][4];

    //usual update 
    super.update();

    //updates server        
    LoadContent.serverPlayerInfo = (PlayerPositionsSerial) server.updatePos(angle, position.x, position.y,objectState);
}
}

問題は更新方法です。NetworkedLocalPLayer プレーヤー クラスでは、ゲーム内のすべてのプレーヤーの位置 (およびその他のビット) を保持するシリアル化されたクラスをサーバーに要求します。このクラスは、ゲームループを実装する LoadContent クラスの静的バージョンに割り当てられます。update メソッドは、playertable 配列内の独自の位置をチェックして、独自の objectState 変数を更新します。これは、ブレークポイントを使用すると、本来の「通常」として返されることがわかります。次に、実行を開始し、LocalPlayer クラスでオンラインで停止する親 update メソッドを呼び出します。

if(objectState == "通常"){

次の行は次のとおりです。

super.update();

これは、私が提供できるMovingObjectsクラスのスーパーアップデートメソッドを呼び出す必要があります。これは、役立つと思われる場合に提供できますが、基本的には、MovingObjectsクラス内とLocalPlayerクラスのsuper.update()呼び出しでブレークオプイントを持っています。打つ。

ゲームループの変数を変更してマルチプレイヤーをオフにすると、これとは関係ありませんが、このメソッドは完全に正常に起動し、何年も変更されていないため、localPlayer クラスを直接使用しました。では、このようにスーパーを使用できない理由はありますか? エラーや例外が発生しています

ありがとうございました

ジョン・ハリス

4

2 に答える 2