站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题精灵在屏幕中碰壁的问题

精灵在屏幕中碰壁的问题

摘要: 精灵在屏幕中碰壁的问题


我看到一段代码.如下:
private void update() {
// Randomly alter the UFO's speed
if (rand.nextInt() % 5 == 0) {
ufoXSpeed = Math.min(Math.max(ufoXSpeed + rand.nextInt() % 2, -8), 8);
ufoYSpeed = Math.min(Math.max(ufoYSpeed + rand.nextInt() % 2, -8), 8);
}

// Move the sprite
ufoSprite.move(ufoXSpeed, ufoYSpeed);

// Wrap the UFO around the screen if necessary
if (ufoSprite.getX() < -ufoSprite.getWidth())
ufoSprite.setPosition(getWidth(), ufoSprite.getY());
else if (ufoSprite.getX() > getWidth())
ufoSprite.setPosition(-ufoSprite.getWidth(), ufoSprite.getY());
if (ufoSprite.getY() < -ufoSprite.getHeight())
ufoSprite.setPosition(ufoSprite.getX(), getHeight());
else if (ufoSprite.getY() > getHeight())
ufoSprite.setPosition(ufoSprite.getX(), -ufoSprite.getHeight());
}
其中ufoSprite为精灵,书上说只要在精灵走到屏幕的边上时候,将相应的方向换为负值就可以了.
比如超出左右边界,把ufoXSpeed的变量取反.
我就这样写了..
if (ufoSprite.getX() < -ufoSprite.getWidth())
ufoSprite.move(-ufoXSpeed, ufoYSpeed);
else if (ufoSprite.getX() > getWidth())
ufoSprite.move(-ufoXSpeed, ufoYSpeed);
if (ufoSprite.getY() < -ufoSprite.getHeight())
ufoSprite.move(ufoXSpeed, -ufoYSpeed);
else if (ufoSprite.getY() > getHeight())
ufoSprite.move(ufoXSpeed, -ufoYSpeed);
结果出来的是,精灵总是在屏幕边上停一会再折回....请问怎么能做到一接触屏幕边缘就返回?
呵呵~~


俺再线等了~~


.....


if (ufoSprite.getX() <= 0)//左边
ufoSprite.move(ufoXSpeed, ufoYSpeed);
else if (ufoSprite.getX() > (getWidth()-ufoSprite.getWidth()))//右边
ufoSprite.move(-ufoXSpeed, ufoYSpeed);
if (ufoSprite.getY() < 0)//上边
ufoSprite.move(ufoXSpeed, ufoYSpeed);
else if (ufoSprite.getY() > (getHeight()-ufoSprite.getHeight()))//下边
ufoSprite.move(ufoXSpeed, -ufoYSpeed);



感觉这种方法 用矩阵来解决会比较好,整个地图做一个矩阵,不过要矩阵大一点,
如果你要的图放2*2的东西就要3*3的矩阵,富余的地方用来做碰壁标示,就省去了
坐标的麻烦


↑返回目录
前一篇: 这样的模拟器怎么做啊?
后一篇: 求DES算法类