Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于图像添加楼层或如何优化已有方法_Java - Fatal编程技术网

Java 基于图像添加楼层或如何优化已有方法

Java 基于图像添加楼层或如何优化已有方法,java,Java,我正在用Java为一个学校项目创建一个游戏。我现在有一个玩家类,我正在创建他将在里面行走的地板。现在,我刚刚做了一个夹紧法,我根据图像添加了不同的部分,这样他就可以在“地板”上行走了。最终,我有了他需要能够跳上的平台,但如果他错过了,我会摔倒。这段代码目前不起作用,我不知道该怎么做。是否有一种更简单或更有效的方式来进行地板?如果没有,我如何使平台工作 我已经尝试在方法末尾使用一个变量来测试它是否是一个平台 package com.sewd.sophomorevisitation.objects;

我正在用Java为一个学校项目创建一个游戏。我现在有一个玩家类,我正在创建他将在里面行走的地板。现在,我刚刚做了一个夹紧法,我根据图像添加了不同的部分,这样他就可以在“地板”上行走了。最终,我有了他需要能够跳上的平台,但如果他错过了,我会摔倒。这段代码目前不起作用,我不知道该怎么做。是否有一种更简单或更有效的方式来进行地板?如果没有,我如何使平台工作

我已经尝试在方法末尾使用一个变量来测试它是否是一个平台

package com.sewd.sophomorevisitation.objects;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

import com.sewd.sophomorevisitation.Background;
import com.sewd.sophomorevisitation.KeyListener;
import com.sewd.sophomorevisitation.Main;
import com.sewd.sophomorevisitation.sprites.SpriteAnimation;
import com.sewd.sophomorevisitation.sprites.SpriteSheet;

public class Player extends GameObject {

    Handler handler;
    static int times = 0;

    private static BufferedImage[] shreccRun = {SpriteSheet.getSprite(0, 0, 128, 106, 0, 0), SpriteSheet.getSprite(1, 0, 128, 106, 0, 0), SpriteSheet.getSprite(0, 0, 128, 106, 0, 0), SpriteSheet.getSprite(2, 0, 128, 106, 0, 0)};
    private static BufferedImage[] shreccJump = {SpriteSheet.getSprite(3, 0, 128, 106, 0, 0), SpriteSheet.getSprite(4, 0, 128, 106, 0, 0)};
    public static SpriteAnimation shreccRunAnimation = new SpriteAnimation(shreccRun, 5);
    public static SpriteAnimation shreccJumpAnimation = new SpriteAnimation(shreccJump, 5);
    public static SpriteAnimation animation = shreccRunAnimation;


    public Player(int x, int y, ID id) {
        super(x, y, id);
    }

    public void tick() {
        y += velY;

        if(x < 0) {
            death();
        }

        if(Main.started) {
            /*floor(1076, 1215, -500, Main.screenSize.width, 0, 972);
            floor(1215, 1374, -500, Main.screenSize.width, 0, 969);
            floor(1374, 1538, -500, Main.screenSize.width, 0, 936);
            floor(1538, 1667, -500, Main.screenSize.width, 0, 925);
            floor(1667, 3711, -500, Main.screenSize.width, 0, 919);*/
            floor(0, 473, -500, Main.screenSize.width, 0, (Main.screenSize.height/ 4) * 3 - 40);
            floor(473, 600, -500, Main.screenSize.width, 0, (Main.screenSize.height/ 4) * 3 - 70);
            floor(600, 775, -500, Main.screenSize.width, 0, (Main.screenSize.height/ 4) * 3 - 90);
            floor(775, 2900, -500, Main.screenSize.width, 0, (Main.screenSize.height/ 4) * 3 - 100);
            floor(2900, 2980, -500, Main.screenSize.width, 0, (Main.screenSize.height/ 4) * 3 - 140);
            floor(2980, 3060, -500, Main.screenSize.width, 0, (Main.screenSize.height/ 4) * 3 - 190);
            floor(2980, 3060, -500, Main.screenSize.width, 0, 873);
            floor(3060, 3073, -500, Main.screenSize.width, 0, 843);
            floor(3073, 3827, -500, Main.screenSize.width, 0, 813);
            floor(3827, 3857, -500, Main.screenSize.width, 0, 784);
            floor(3827, 10000, -500, Main.screenSize.width, 0, 784);

        }

        if(animation != shreccJumpAnimation) {
            animation.update();
        }else {
            if(times <= 5)animation.update();
            times++;
        }
    }

    public void death() {
        System.out.println("Dead");
    }

    public static void floor(int start, int stop, int minX, int maxX, int minY, int maxY) {
        if( start <= Background.x && Background.x < stop) Player.clamp(minX, maxX, minY, maxY);
    }

    public static void clamp(int minX, int maxX, int minY, int maxY) {
        if(x <= minX) x = minX;
        else if(x >= maxX) x = maxX;
        else if(y <= minY) {
            y = minY;
            KeyListener.isInAir = true;
            velY = -velY;
            if(velY == 0) velY = 10;
        }else if(y >= maxY) {
            y = maxY;
            KeyListener.isInAir = false;
            if(times > 0) {
                times = 0;
                animation.stop();
                animation.restart();
                animation = shreccRunAnimation;
                animation.start();
            }

        }else return;
    }

    public void render(Graphics g) {
        g.drawImage(animation.getSprite(), x - shreccRun[0].getWidth() - 50, y, shreccRun[0].getWidth() * 2, shreccRun[0].getHeight() * 2, null);
    }


}

package com.sewd.sososomologorientation.objects;
导入java.awt.Graphics;
导入java.awt.image.buffereImage;
导入com.sewd.sosomologorientation.Background;
导入com.sewd.so二重访.keylister;
import com.sewd.soso二重访.Main;
导入com.sewd.soso二重访.sprites.SpriteAnimation;
导入com.sewd.so二重访.sprites.SpriteSheet;
公共类玩家扩展游戏对象{
处理者;
静态整数倍=0;
私有静态缓冲区映像[]shreccRun={SpriteSheet.getSprite(0,0,128,106,0,0),SpriteSheet.getSprite(1,0,128,106,0,0),SpriteSheet.getSprite(0,0,128,106,0,0),SpriteSheet.getSprite(2,0,128,106,0,0)};
私有静态缓冲区映像[]shrecjump={SpriteSheet.getSprite(3,0,128,106,0,0),SpriteSheet.getSprite(4,0,128,106,0,0)};
公共静态SpriteAnimation shrecrunanimation=新SpriteAnimation(shrecrun,5);
公共静态SpriteAnimation ShrecJumpAnimation=新SpriteAnimation(ShrecJump5);
公共静态SpriteAnimation=shrecrunanimation;
公共播放器(整数x,整数y,ID){
super(x,y,id);
}
公共空白勾号(){
y+=0;
if(x<0){
死亡();
}
if(Main.start){
/*地板(10761215,-500,主屏幕尺寸。宽度,0972);
地板(12151374,-500,主屏幕尺寸。宽度,0969);
地板(13741538,-500,主屏幕尺寸,宽度,0936);
地板(15381667,-500,主屏幕尺寸,宽度,0925);
地板(16673711,-500,主屏幕尺寸。宽度,0919)*/
地板(0473,-500,Main.screenSize.width,0,(Main.screenSize.height/4)*3-40);
地板(4736000,-500,Main.screenSize.width,0,(Main.screenSize.height/4)*3-70);
地板(600775,-500,Main.screenSize.width,0,(Main.screenSize.height/4)*3-90);
地板(7752900,-500,Main.screenSize.width,0,(Main.screenSize.height/4)*3-100);
地板(29002980,-500,Main.screenSize.width,0,(Main.screenSize.height/4)*3-140);
地板(29803060,-500,Main.screenSize.width,0,(Main.screenSize.height/4)*3-190);
地板(29803060,-500,主屏幕尺寸。宽度,0873);
地板(30603073,-500,主屏幕尺寸。宽度,0843);
地板(3073827,-500,主屏幕尺寸。宽度,0813);
地板(38273857,-500,主屏幕尺寸。宽度,0784);
地板(3827,10000,-500,主屏幕尺寸,宽度,0784);
}
if(动画!=shrecjumpanimation){
animation.update();
}否则{
如果(次算出了

public static boolean onFloor;


public void tick() {
    if(Main.isStarted()) {

        floor();

        if(!onFloor) {
            Player.setVelY(20);
        }else {
            Player.setVelY(0);
        }
    }
}

private void floor() {
    clamp(0, 5000, 824, "f");
    clamp(5000, 10000, 750, "p");
}

private void clamp(int start, int stop, int minY, String type) {
    if(x > start && x < stop) {
        if(Player.getY() != minY) {
            if(Player.getY() > minY) {
                if(type != "p") {
                    Player.setY(minY);
                    Player.setVelY(0);
                    onFloor = true;
                    return;
                }
            }
            if(!Player.jumping) {
                Player.setVelY(10);
                onFloor = false;
            }
        }else if(Player.getY() == minY) {
            Player.setY(minY);
            Player.setVelY(0);
            onFloor = true;
        }else if(Player.getY() > minY) {
            if(type != "p") {
                Player.setY(minY);
                Player.setVelY(0);
            }
        }
    }
}
地板上的公共静态布尔值;
公共空白勾号(){
if(Main.isStarted()){
地板();
如果(!在地板上){
赛特维利(20);
}否则{
Player.setVelY(0);
}
}
}
私人空置楼层(){
夹钳(0,5000824,“f”);
夹具(5000、10000、750,“p”);
}
专用空心夹(整数开始、整数停止、整数最小、字符串类型){
如果(x>开始和(&x<停止){
如果(Player.getY()!=minY){
如果(Player.getY()>minY){
如果(类型!=“p”){
玩家:塞蒂(米尼);
Player.setVelY(0);
onFloor=正确;
返回;
}
}
如果(!玩家跳跃){
赛特维利(10);
onFloor=错误;
}
}else if(Player.getY()==minY){
玩家:塞蒂(米尼);
Player.setVelY(0);
onFloor=正确;
}else if(Player.getY()>minY){
如果(类型!=“p”){
玩家:塞蒂(米尼);
Player.setVelY(0);
}
}
}
}

对于单个SO问题来说,逻辑本身可能有点过于复杂。另一方面:游戏通常包含玩家和由多个元素组成的世界等实体(即你的场地和平台).然后你要么让世界检查与玩家的碰撞,要么反过来-你通常不会让世界成为玩家本身的一部分。