协调时间间隔,因为条件总是错误的-游戏,Kotlin,Android Studio
我正在做一个大学作业中的android游戏,但我不知道如何编写代码。 因此,在游戏中,有一个障碍物朝着玩家的方向移动(从屏幕的顶部到底部),玩家必须避开这个障碍物。问题是,每当玩家碰到障碍物时,我希望分数改变,并且在开始时(屏幕顶部)重置障碍物 例如: 如果障碍物坐标位于玩家区域(其位置加上图像长度)之间,则障碍物将命中=真,因此,分数将更改,障碍物将到达起始位置协调时间间隔,因为条件总是错误的-游戏,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
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()
}
}