我一直在努力防止精灵离开屏幕,到目前为止,我一直在防止它离开屏幕的左侧和屏幕的底部。但当我试着不让它离开屏幕的右侧时。它确实显示了精灵/角色。
if (charpos.X <= 0)
charpos.X = 0;
else
if (charpos.X <= 1280)
charpos.X = 1280;
当我打开if(charpos.X <= 1280)
charpos.X = 1280;
时,它将精灵传送到我看不到的其他地方。我是不是把屏幕右侧的代码写错了?
是的,你写错了。你说的是>= 1280
。在正常的游戏情况下,<=
将始终评估为true,并将X位置设置为1280。
由于XNA坐标从左上角绘制,因此您无法看到该位置(在1280宽的窗口上)。你需要:
int rightSide = 1280 - sprite.Width;
if (charpos.X > rightSide )
charpos.X = rightSide ;
从边缘减去精灵的宽度,允许精灵始终保持"在屏幕上"。比较中的"或等于"部分是不必要的,因为相等条件只会将值设置为它已经存在的值。
你的代码中有一个明确的和一个可能的错误。
明确的错误是你的第二个if语句:
if (charpos.x <= 1280)
应该是:
if (charpos.x >= 1280)
否则,屏幕上的任何内容都将被视为屏幕外。
可能的错误在于你如何将精灵移回屏幕。如果你的精灵原点是在精灵的左上角,那么将x坐标设置为1280将使精灵位于屏幕的右侧。
要解决这个问题,您需要将代码更改为如下内容:
charpos.x = 1280 - character.width;
这将考虑字符在屏幕上的宽度