视频: Week 5 2024
一旦精灵开始移动,总是有可能离开屏幕边界。通常情况下,HTML5游戏开发者通过五种方式之一进行回应:换行,反弹,停止,死亡或继续。 simpleGame库有一个边界检查例程,允许您指定要使用哪些默认行为。精灵的boundAction属性指示应该使用哪个动作。您可以使用边界检查器执行以下操作:
<! - 1 - >-
确定边界。
边框由画布宽度决定。
-
检查用户是否在边界之外。然后,另一系列变量被创建,包含布尔值,指示精灵是否关闭其中一个边界:offRight,offLeft,offTop和offBottom。使用基本的if语句来确定精灵是否以这些方式之一离开屏幕。
-
使用简单的if语句来确定当前为精灵设置的边界动作。
如果boundAction是WRAP:
-
将x或y变量更改为反方,但保留dx和dy值。
如果boundAction是BOUNCE:
-
如果精灵从顶部或底部反弹,则反转dy;如果精灵从左或右反弹,则反转dx。没有必要直接更改x或y。
<!如果
boundAction -
是 STOP: 不管退出哪个边界,只需将速度设置为零即可。 如果
boundAction
-
是 DIE: 将速度设置为零并调用精灵的hide()方法。这将导致精灵消失,在碰撞计算中不再考虑。 任何其他的boundAction被认为是CONTINUE。
这里没有必要的动作,因为精灵将继续移动,即使它不可见。如果这是所需的效果,你应该以某种方式向用户指出精灵的位置,或者为精灵返回提供一些方法。
-
以下是碰撞检查程序代码的一部分:
offRight = false; offLeft = false; offTop = false; offBottom = false; if(this。x> rightBorder){offRight = true;} if(this。x bottomBorder){offBottom = true;} if(this。y <0){offTop = true;} if(this。boundAction == WRAP) {if(offRight){this。 x = leftBorder;} //结束if if(offBottom){this。 y = topBorder;} //结束if(offLeft){this。 x = rightBorder;} //结束if(offTop){this。 y = bottomBorder;}}否则if(this。boundAction == BOUNCE){if(offTop || offBottom){this。dy * = -1;这个。 calcSpeedAngle();这个。 imgAngle =这个。 moveAngle;} if(offLeft || offRight){this。 dx * = -1;这个。 calcSpeedAngle();这个。 imgAngle =这个。 moveAngle;}} else if(this。boundAction == STOP){if(offLeft || offRight || offTop || offBottom){this。 setSpeed(0);}} else if(this。boundAction == DIE){if(offLeft || offRight || offTop || offBottom){this。隐藏();这个。 setSpeed(0);}} else {//保持继续}} //结束checkbounds
如果你想在simpleGame中改变一个精灵的边界动作,你可以使用setBoundAction()方法来实现。
请注意,有些情况可能需要不同的行为。例如,您可能想要围绕两侧,但停在顶部或底部。如果您需要更具体的行为,只需为您的精灵构建一个新的checkBounds()方法。但是,你需要检查所有的边界,因为你的新的checkBounds()将会完全覆盖simpleGame中的内建。