падения и столкновения на xna - PullRequest
0 голосов
/ 24 декабря 2011

я делаю платформу типа игры.Я сделал моего главного героя прямоугольником, используя класс Rectangle, а также платформы.Платформы постоянно движутся вверх по экрану, и когда мой персонаж сталкивается с верхом платформы, я хочу, чтобы он приземлился и двигался с той же скоростью, что и платформа, иначе он должен упасть.У меня все работает, кроме падающей части.Если я включаю падение, оно никогда не остается на платформах, но если я включаю падение, оно работает нормально.По сути, предполагается, что персонаж все время падает, если только он не приземлится на платформу, тогда его направление / скорость у должны измениться на скорость платформ.было бы здорово, чтобы персонаж падал, когда не сталкивался с платформами.Я знаю, что я делаю, возможно, не самый эффективный способ сделать это, если есть лучший способ, который я хотел бы знать.Я новичок в xna, но я знаю java / c #

            Rectangle playerRec = new Rectangle((int)player.position.X, (int)player.position.Y,player.width, player.height);
        foreach (Platforms platform in platforms)
        {
            Rectangle platformRec = new Rectangle((int)platform.position.X, (int)platform.position.Y, platform.width, platform.height);
            if ((playerRec.Intersects(platformRec) && (playerRec.Y + playerRec.Height) - platformSpeed < platformRec.Y) &&
                (playerRec.X < platformRec.X + platformRec.Width && playerRec.X + playerRec.Width > platformRec.X))
            {
                gravity = 0;
                player.position.Y -= platformSpeed;

            }
            else if(player.position.Y != platform.position.Y)
            {
                gravity = 5;
                //player.position.Y += gravity;
            }

Ответы [ 2 ]

3 голосов
/ 24 декабря 2011

Скорее всего, ваша проблема заключается в том, что вы не ВЫРЫВАЕТЕ петлю, когда попадаете на перекресток. Вы проходите по ВСЕМ платформам каждый раз, поэтому, когда одна из них пересекается, гравитация будет = 0, но затем угадайте, что, она проверит следующую и гравитация снова будет 5.

Вы должны были бы реструктурировать свой цикл, или вы могли бы проверить этот физический движок 2D, чтобы справиться с большинством этих вещей для вас:

http://farseerphysics.codeplex.com/

0 голосов
/ 24 декабря 2011

У Microsoft есть образец Platformer , в котором есть падение и столкновение. Это отличный пример, чтобы учиться, и вам не понадобятся сторонние физические движки, чтобы сделать это за вас.

...