每一个速度阵列中的物体碰撞后改变 [英] Speed of every object within array changing upon collision

查看:105
本文介绍了每一个速度阵列中的物体碰撞后改变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发在AndEngine一场比赛,我有车sprties的数组。我检查时,他们与屏幕上的其它物体发生碰撞,而当他们这样做,该数组的单项指标应该有它的速度改变。然而,在屏幕的速度每一辆汽车也发生改变。

任何帮助将是AP preciated。请附上低于code:

  this.registerUpdateHandler(新IUpdateHandler(){
        @覆盖
        公共无效的onUpdate(最终浮动pSecondsElapsed){
            的for(int i = 0; I< rManager.getInstance()carArray.length;我++)
            {
                if(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[i].getIceSprite())) {
                    Log.e(测试,冰碰撞);
                    。rManager.getInstance()carArray [I] .setCarSpeed​​(3F);
                }其他{
                    。rManager.getInstance()carArray [I] .setCarSpeed​​(0.5F);
                }
            }
        }        @覆盖
        公共无效复位(){
            // TODO自动生成方法存根        }
    });

更新code:

 的for(int i = 0; I< rManager.getInstance()carArray.length;我++)
                {
                    对于(INT J = 0; J< rManager.getInstance()iceArray.length; J ++)
                    {
                        if(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[j].getIceSprite())) {
                            Log.e(日志,汽车与ICE相撞LOL);
                            。rManager.getInstance()carArray [I] .setCarSpeed​​(3F);
                        }其他{
                            。rManager.getInstance()carArray [I] .setCarSpeed​​(1F);
                        }
                    }
                }

更新code 2:

  @覆盖
保护无效onManagedUpdate(浮动pSecondsElapsed){            的for(int i = 0; I< rManager.getInstance()carArray.length;我++)
            {
                对于(INT J = 0; J< rManager.getInstance()iceArray.length; J ++)
                {
                    如果(this.getX()≤(rManager.camera.getWidth()+ this.getWidth())){
                        this.setPosition(this.getX()+(rManager.getInstance()carArray [I] .getSpeed​​()+ speedMod),this.getY());
                    }其他{
                        this.setPosition(0 - this.getWidth(),this.getY());
                    }                    如果(rManager.getInstance().iceArray[j].getIceSprite().collidesWith(rManager.getInstance().carArray[i].getCarSprite()))
                    {
                        Log.e(日志,车用冰相撞);
                        this.setPosition(this.getX()+(rManager.getInstance()carArray [I] .getSpeed​​()+ 2F),this.getY());
                    }
                }
            }
            super.onManagedUpdate(pSecondsElapsed);
    }


解决方案

首先,您正在使用的汽车的索引访问到的(IceSprites)阵列的通知。如果您有不同数量的这些元素,你可以有例外。

如果每节车厢一个冰精灵的元素碰撞你的code仅检查。这是你想要的吗?

rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[i].getIceSprite())

也许你要检查,如果你的车在你的世界psented任何冰元素$ P $冲突。没有?
在这种情况下,你需要另一个循环的冰元素。

我希望这可以帮助,结果
顺祝商祺结果

I am developing a game in AndEngine and I have an array of car sprties. I am checking when they collide with other objects on the screen, and when they do, the individual index of that array should have it's speed changed. however, every car on the screen's speed also changes.

any help would be appreciated. please find attached the code below:

this.registerUpdateHandler(new IUpdateHandler() {
        @Override
        public void onUpdate(final float pSecondsElapsed) {
            for (int i = 0; i < rManager.getInstance().carArray.length; i++)
            {
                if(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[i].getIceSprite())) {
                    Log.e("test", "ice collision");
                    rManager.getInstance().carArray[i].setCarSpeed(3f);
                } else {
                    rManager.getInstance().carArray[i].setCarSpeed(0.5f);
                }
            }
        }

        @Override
        public void reset() {
            // TODO Auto-generated method stub

        }
    });

updated code:

for (int i = 0; i < rManager.getInstance().carArray.length; i++)
                {
                    for (int j = 0; j < rManager.getInstance().iceArray.length; j++)
                    {
                        if(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[j].getIceSprite())) {
                            Log.e("log", "CAR COLLIDED WITH ICE LOL");
                            rManager.getInstance().carArray[i].setCarSpeed(3f);
                        } else {
                            rManager.getInstance().carArray[i].setCarSpeed(1f);
                        }
                    }
                }

updated code 2:

@Override
protected void onManagedUpdate(float pSecondsElapsed) {

            for (int i = 0; i < rManager.getInstance().carArray.length; i++)
            {                       
                for (int j = 0; j < rManager.getInstance().iceArray.length; j++)
                {
                    if(this.getX() < (rManager.camera.getWidth() + this.getWidth())){
                        this.setPosition(this.getX() + (rManager.getInstance().carArray[i].getSpeed() + speedMod), this.getY());
                    } else {
                        this.setPosition(0 - this.getWidth(), this.getY());
                    }

                    if (rManager.getInstance().iceArray[j].getIceSprite().collidesWith(rManager.getInstance().carArray[i].getCarSprite()))
                    {
                        Log.e("log", "car collided with ice");
                        this.setPosition(this.getX() + (rManager.getInstance().carArray[i].getSpeed() + 2f), this.getY());
                    }
                }
            }               


            super.onManagedUpdate(pSecondsElapsed);
    }

解决方案

First, notice that you are accessing to the array of (IceSprites) using the index of the cars. If you have a different number of these elements you can have exceptions.

Your code is only checking if each car collides with one ice sprite element. Is this what you want?

rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[i].getIceSprite())

Maybe you want to check if your car collides with any ice element presented in your world. No? In that case you will need another loop for the ice elements.

I hope this helps,
Best Regards

这篇关于每一个速度阵列中的物体碰撞后改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆