0
\$\begingroup\$

I'm fairly new to creating a 2D game in java and I'd love some help. I'm trying to create a sort of knock back effect the enemies have on you. So when you are touched by a enemy you will:

  1. lose life

  2. be knocked back a few pixels

I thought about saying something simple such as:

    if ((player.x & player.y) == (enemy.x & enemy.y)){  
        player.x += 8;
        player.y += 8;
    }

But seeing as this will only push you back with no hope of moving while being pushed, I didn't want to use it. Is there any simple, yet effective way for going about this?

\$\endgroup\$
2
  • 1
    \$\begingroup\$ If you can, adding a velocity component, and adding/subtracting to/from the velocity would help facilitate a more realistic knockback. \$\endgroup\$
    – Pandacoder
    Dec 11 '13 at 1:31
  • 1
    \$\begingroup\$ It could be my unfamiliarity with Java, but the conditional there looks dicey to me. I think what you want is "if(player.x == enemy.x && player.y == enemy.y)" The bitwise-and operators in the version you've shown could lead to some unexpected false positives. \$\endgroup\$
    – DMGregory
    Dec 11 '13 at 17:19
3
\$\begingroup\$

Usually this is done by changing velocity.

If you simply change position, there is danger of stucking in walls (and other solid objects, including enemises) or falling/jumping through them (depends on your collision system and level design).

Also you need to configure friction and/or gravity accordingly, so player will not fly into open space after one kick.

If inertial sliding will be too smooth for you, some engines allowing to attach short-living constant-power pushing forces to objects.

Honestly, it is hard to answer without knowing anything about your physics engine and its capabilities.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.