当前位置: 首页 > 知识库问答 >
问题:

(爪哇)如何让charachter在接触墙壁时上下移动[关闭]

施凡
2023-03-14
public void Collisions(){

        boolean truthCheck = false;
        //If this object doesnt hit anything then there was no collision so its initially false
        GameObject tempPlayer = object.get(0);
        //Just a really bad way for me to get the player 
        for (int i = 0;i < object.size();i++){
            GameObject tempObject = object.get(i);
            //This cycles through all of my objects and if the ID is solid then it'll run the check on it 
            if(tempObject.subid == SubID.Solid){
                if (tempPlayer.getX() + tempPlayer.getWidth() +  tempPlayer.getVelX() - 4>= tempObject.getX() && tempPlayer.getX() + 4 + tempPlayer.getVelX() <= tempObject.getX() + tempObject.getWidth() && tempPlayer.getY() + tempPlayer.getHeight() + tempPlayer.getVelY() - 4>= tempObject.getY() && tempPlayer.getY() + tempPlayer.getVelY() + 4 <= tempObject.getY() + tempObject.getHeight()) {
                    //This bit is a rectangle collision detector^
                    {
                        truthCheck = true;
                        //It collided!
                        break;
                    }
                }
            }

        }
        tempPlayer.setCollides(truthCheck);
    }

共有1个答案

阎星河
2023-03-14

据我所知,问题在于何时调用collections

主要应该在播放器上、下、左、右移动时有类似的内容

class Player
{
    ...
    //could return just void
    public boolean moveRight()
    {
      this.right = this.right+1;
      //check collisions for player new coordonates
      //need just for a specific player
      //assume this method calculate all collisions and set up properly each player
      new Collision().Collisions();
      if(this.collision) 
      {
        //true
        //revert to old coords.
        //screen will not be updated (collison)
        this.right = this.right-1;
        return false;
      }
      //false - move allowed
      update_Player_Move_On_Screen();
      return true;
      
    }
    ...
}

相反,如果发生冲突,可能会改变玩家坐标并更改回来,方法collaction应该允许类似的内容。

public boolean Collisions(Player P) { ... } 
boolean move_allowed = new Collision().Collisions(new Player(new_coords));
//just see if new coord will be allowed 
//if true, then change player coords and update screen
 类似资料:
  • 我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL

  • 我已经尝试解决了平滑的玩家-墙壁碰撞的问题,这样玩家可以沿着墙壁滑动。 我尝试了以下内容: 但是如果玩家碰到了墙,他不会滑动...他只是停下来了。(我对W,A,S,D也是分开做的。) 只有当我将玩家位置设置回他正在触摸的墙壁位置时,它才有效。如下: 但是它不起作用,因为对于与另一面墙相连的墙,玩家会接触更多的边,玩家会跳到角落...所以它只适用于一面墙... 我的问题是:如何以另一种方式使玩家与墙

  • 我需要计算页面上的webElements。最初,它只打开几个元素,但是当你向下滚动时,会出现新元素。你不能使用ExpectedConditions.numberOfElementsToBeLessThan(),因为它不知道页面上会有多少元素。 要解决这个问题,我只需要让硒等待几秒钟,直到新的元素出现在DOM中。但是不允许使用线程睡眠。那么,我该如何解决这个问题?

  • 问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf

  • 我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。

  • 问题内容: 我是Javafx的新手,正在创建一个简单的程序。我想要实现的目标是让球从墙壁上弹起,但我还没有弄清楚该怎么做。另外,请随时留下有关我的代码的其他建议。 这是源代码: 感谢您的帮助。 问题答案: 一个提示:您应该避免比较双精度值的完全相等 。 只需对代码进行一些小的更改,您就已经可以使用:

  • 我正在看Android的新ARCore库。它有检测水平表面的方法,但没有检测垂直表面或墙壁的方法。 我实际上试图使示例应用程序检测墙壁,但我有很多问题。 在ARCore中是否有一种本机或非本机检测垂直表面的方法?

  • 我想问题是我标记的地方。它在这里: 但我不知道为什么。我的理论是:球向上移动,击中了顶墙,踢进,使=真,那么和相应地改变(如果击中了顶墙,应该保持不变,而应该乘以-1)。然后它会向下移动,因此从顶墙上“弹”出来。 注意:目前我只工作的顶部墙壁。其他三个等我能想出怎么先从顶墙上弹开的时候再做。 你能帮我看看有什么问题吗?而如果这种操作需要使用vector2类,你能给我解释一下,或者给我一个学习的地方