Show Posts
|
|
Pages: [1]
|
|
2
|
Game Development / Newbie & Debugging Questions / Moving problem (Side-scroller)
|
on: 2012-05-08 15:14:46
|
Hello ! I currently have a problem with my Side-scroller. (I'm using SLICK2D) My player moves correctly(the background in fact), and the collisions are working correctly too. But I don't really know how to move correctly my monster entity, because they don't move with the background... Here are my codes: Player.java : 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| package com.poulpicious.gtw.entities;
import org.newdawn.slick.Color; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Input; import org.newdawn.slick.geom.Rectangle; import org.newdawn.slick.state.StateBasedGame;
public class Player extends LivingEntity {
public Player(float x, float y, float width, float height) { super(x, y, width, height); screenXPos = 400; }
@Override public void render(GameContainer gc, StateBasedGame sbg, Graphics g) { g.setColor(Color.white); g.draw(new Rectangle(screenXPos - width / 2 + 1, yPos, width, height)); }
@Override public void update(GameContainer gc, StateBasedGame sbg, int delta, Input input) { if (input.isKeyDown(Input.KEY_Q)) { xDir = -2; } if (input.isKeyDown(Input.KEY_D)) { xDir = 2; } if (input.isKeyDown(Input.KEY_LSHIFT)) { xDir *= 1.4; } if (input.isKeyDown(Input.KEY_SPACE) && hasJump) { yDir = (float) -(4); hasJump = false; startJumpY = yPos; }
startX = xPos; startY = yPos; startXDir = xDir; startYDir = yDir;
collidingTop = false;
moveBounds(); gravity(); move(); handleCollisions(); xDir = 0; }
public void moveBounds() { bounds.setLocation(xPos + xDir, yPos + yDir); }
public void move() { xPos += xDir; yPos += yDir; }
public void gravity() { yDir += 0.06; }
private void handleCollisions() { for (Rectangle rec : blocks) {
Rectangle rect = new Rectangle(rec.getX() - screenXPos + width / 2 - 1, rec.getY(), rec.getWidth(), rec.getHeight());
float[] points = bounds.getPoints();
if (rect.contains(points[4] - 2, points[5] + 2) || rect.contains(points[6] + 2, points[7] + 2)) { yPos = startY; yDir = 0; hasJump = true; collidingTop = true; }
if (rect.intersects(getBounds()) && collidingTop == false) { xPos = startX; xDir = startXDir; } } }
public float getRealXPos() { return screenXPos + width / 2 - 1; } } |
MobEntity.java : 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| package com.poulpicious.gtw.entities;
import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Input; import org.newdawn.slick.geom.Rectangle; import org.newdawn.slick.state.StateBasedGame;
public class MobEntity extends LivingEntity {
private Player thePlayer;
public MobEntity(Player player, float x, float y, float width, float height) { super(x, y, width, height); thePlayer = player; isAlive = true; screenXPos = x; }
@Override public void render(GameContainer gc, StateBasedGame sbg, Graphics g) { g.draw(new Rectangle(xPos - screenXPos, yPos, width, height)); }
@Override public void update(GameContainer gc, StateBasedGame sbg, int delta, Input input) { if (thePlayer.getRealXPos() < xPos - screenXPos) { xDir = -2; } if (thePlayer.getRealXPos() > xPos - screenXPos) { xDir = 2; } startX = xPos; startY = yPos; startXDir = xDir; startYDir = yDir;
collidingTop = false;
moveBounds(); gravity(); move(); handleCollisions(); xDir = 0; }
public void moveBounds() { bounds.setLocation(xPos + xDir, yPos + yDir); System.out.println(bounds.getX()); }
public void move() { xPos += xDir; yPos += yDir; }
public void gravity() { yDir += 0.06; }
private void handleCollisions() { for (Rectangle rec : blocks) {
Rectangle rect = new Rectangle(rec.getX() - screenXPos, rec.getY(), rec.getWidth(), rec.getHeight()); float[] points = bounds.getPoints();
if (rect.contains(points[4] - 2, points[5] + 2) || rect.contains(points[6] + 2, points[7] + 2)) { yPos = startY; yDir = 0; hasJump = true; collidingTop = true; }
if (rect.intersects(getBounds()) && collidingTop == false) { xPos = startX; xDir = startXDir; } } }
public boolean isAlive() { return isAlive; }
} |
|
|
|
|
|
|
Add your game by posting it in the WIP section,
or publish it in Showcase.
The first screenshot will be displayed as a thumbnail.
|
|