Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
协调时间间隔,因为条件总是错误的-游戏,Kotlin,Android Studio_Android_Android Studio_Kotlin_Coordinates_2d Games - Fatal编程技术网

协调时间间隔,因为条件总是错误的-游戏,Kotlin,Android Studio

协调时间间隔,因为条件总是错误的-游戏,Kotlin,Android Studio,android,android-studio,kotlin,coordinates,2d-games,Android,Android Studio,Kotlin,Coordinates,2d Games,我正在做一个大学作业中的android游戏,但我不知道如何编写代码。 因此,在游戏中,有一个障碍物朝着玩家的方向移动(从屏幕的顶部到底部),玩家必须避开这个障碍物。问题是,每当玩家碰到障碍物时,我希望分数改变,并且在开始时(屏幕顶部)重置障碍物 例如: 如果障碍物坐标位于玩家区域(其位置加上图像长度)之间,则障碍物将命中=真,因此,分数将更改,障碍物将到达起始位置 class Obstacle(){ var x = Random.nextInt(0, 1080)*1f //A pla

我正在做一个大学作业中的android游戏,但我不知道如何编写代码。 因此,在游戏中,有一个障碍物朝着玩家的方向移动(从屏幕的顶部到底部),玩家必须避开这个障碍物。问题是,每当玩家碰到障碍物时,我希望分数改变,并且在开始时(屏幕顶部)重置障碍物

例如: 如果障碍物坐标位于玩家区域(其位置加上图像长度)之间,则障碍物将命中=真,因此,分数将更改,障碍物将到达起始位置

class Obstacle(){
   var x = Random.nextInt(0, 1080)*1f    //A place in the screen width
   var y = 0f                            //at the start position
   var speed = 20f
   var hit = false
   
   fun move(){
      hit = verifyHit(x,y)
      y += speed
      if (y>screen){
          y = 0
      }else if(hit){
         gameView.score --
         y=0
         hit = false
      }
   }

   fun verifyHit(x,y){
       return ((x > ufo.x || x < ufo.x + 400) || (y >= ufo.y || y < ufo.x + 400))
    }
类障碍(){
var x=Random.nextInt(01080)*1f//屏幕宽度中的一个位置
变量y=0f//位于起始位置
无功转速=20f
var hit=false
妙招{
命中=验证命中(x,y)
y+=速度
如果(y>屏幕){
y=0
}否则如果(命中){
gameView.score--
y=0
命中=错误
}
}
趣味验证点击(x,y){
返回((x>ufo.x | | x=ufo.y | | y
问题是,或者这个verifyHit返回总是false,或者它总是返回true。我尝试了这么多运算符,但这似乎是描述屏幕上某个区域更符合逻辑的方式。我最后一次尝试是:仅当障碍物位于x间隔和y间隔的交叉点时,它才会到达,但当我运行它时,没有任何效果所以我得出结论,这总是错误的。 这是我的应用程序屏幕的截图:


谢谢!!

没有足够的信息来确定它为什么不能给您正确的结果,但是您可以进行一些设计改进,以更好地分离关注点,这将使跟踪此类错误的原因变得更容易

你的障碍类不应该直接引用你的玩家
ufo
实例。拥有这样的代码会使维护变得非常困难,因为你开始有各种各样的类相互指向,所以当你更改任何类的某些内容时,很难找到所有你必须编辑代码来保存它的地方工作正常

我将为一个对象的边界创建一个接口,并给它一个intersects函数,以便在两个对象重叠时进行测试

interface Rectangle {
    var x: Float
    var y: Float
    var width: Float = 0f // Default to point size
    var height: Float = 0f
}

infix fun Rectangle.intersects(o: Rectangle): Boolean {
    return x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y
}
拥有类应该负责处理两个对象之间的分数和交点,如下所示:

for (obstacle in obstacles) {
    obstacle.move()
    if (obstacle intersects player) {
        gameScore--
        obstacle.reset()
    }
}
for (obstacle in obstacles) {
    obstacle.move()
    if (obstacle intersects player) {
        gameScore--
        obstacle.reset()
    }
}