Because they also walk in straight line's and they don't here player's action(sounds)
Do you mean you
want them to walk in a straight line? or do you want them to chase the player? anyway you should read my entire post as it might give you a few ideas.
either way you are not doing it right. The way you code it, the monster will only move once, and only if they are in that exact position.
If you want to make the monster chase the player:
1 2 3 4 5 6 7
| if (monster.x > player.x) move(-1,0); else if (monster.x < player.x) move(1,0);
|
Otherwise if you want the monster to move randomly, you could choose a random position to move to each frame/length of time
eg.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| long lastTime = 0; Random random = new Random(); int targetX = 0; int targetY = 0;
if (System.currentTimeMillis() - lastTime > 3000) { lastTime = System.currentTimeMillis(); targetX = random.nextInt(width); targetY = random.nextInt(height); }
if (monster.x > targetX ) move(-1,0); else if (monster.x < targetX) move(1,0);
|
Otherwise if you want the monster to patrol up and down the screen or something,
have 2(or more) positions and move back and forward between them
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| int[] x = new int[2]; int[] y = new int[2]; int currentTarget = 0; x[0] = 0; y[0] = 20; x[1] = 100; y[1] = 30;
if (monster.x > x[currentTarget]) move(-1,0); else if (monster.x < x[currentTarget]) move(1,0);
if ((monster.x == x[currentTarget]) && (monster.y == y[currentTarget])) { currentTarget++; if (currentTarget > x.length) currentTarget = 0; } |