Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  Smooth animation  (Read 521 times)
0 Members and 1 Guest are viewing this topic.
Offline dah01

JGO n00b
*

Posts: 46
Medals: 13



« on: 2011-12-19 22:51:37 »

I'm not sure what is wrong with my animation. It was smooth, now it's not, I only have two classes here. Is it something to do with my delay or is it something to do with how I'm using spritemanager.getSprite();

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  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
package tiledgame;

import java.awt.Point;
import java.util.Map;
import org.newdawn.slick.Image;
import org.newdawn.slick.SpriteSheet;

/**
 * @author HadesVine
 */

public class CharacterEntity {
    public static final int UP = 0;
    public static final int RIGHT = 1;
    public static final int DOWN = 2;
    public static final int LEFT = 3;
    public static final int IDLE = 0;
    public static final int WALK = 1;
   
    private SpriteSheet spriteSheet;
    private int facing = 0;//The direction a sprite is facing;
   private int state = 0;
    private float locationX;
    private float locationY;
    private int walkDelay = 200;
    private int currentFrame = 0;
    private int timePassed = 0;
    private int walkColumn = 0;

    public CharacterEntity(SpriteSheet spriteSheet, float locationX, float locationY) {
        this.spriteSheet = spriteSheet;
        this.locationX = locationX;
        this.locationY = locationY;
    }

    public int getFacing() {
        return facing;
    }

    public void setFacing(int facing) {
        this.facing = facing;
    }

    public float getLocationX() {
        return locationX;
    }

    public void setLocationX(float locationX) {
        this.locationX = locationX;
    }

    public float getLocationY() {
        return locationY;
    }

    public void setLocationY(float locationY) {
        this.locationY = locationY;
    }

    public void setState(int state) {
        this.state = state;
    }

    public int getState() {
        return state;
    }

    public int getWalkDelay() {
        return walkDelay;
    }

    public void setWalkDelay(int walkDelay) {
        this.walkDelay = walkDelay;
    }
   

    public int getWalkColumn() {
        return walkColumn;
    }

    public void setWalkColumn(int walkColumn) {
        this.walkColumn = walkColumn;
    }

    public void tick(int delta) {
        if (this.state == WALK) {
            if (timePassed >= walkDelay) {
                timePassed = 0;
                if (this.currentFrame == 1) {
                    this.currentFrame = -1;
                } else {
                    this.currentFrame = 1;
                }
            } else {
                timePassed += delta;
            }
        }else{
            currentFrame = 0;
        }
    }
    public Image getSprite() {
        return this.spriteSheet.getSprite(this.currentFrame + this.walkColumn, this.facing);
    }
}




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  
package tiledgame;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;

/**
 * @author HadesVine
 */

public class TiledGame extends BasicGame {

    private GameContainer gc;
    private float moveSpeed = 1;
    private CharacterEntity testEntity;
    private boolean playerIsMoving = false;

    public TiledGame() {
        super("Tiled game");
    }

    public static void main(String[] args) throws SlickException {
        AppGameContainer app = new AppGameContainer(new TiledGame());
        app.setDisplayMode(1024, 768, false);
        app.start();
    }

    @Override
    public void init(GameContainer gc) throws SlickException {
        testEntity = new CharacterEntity(new SpriteSheet("com/hadesvine/tilegame/tiles/crono.png", 24, 32), 400, 300);
        testEntity.setWalkColumn(4);
        testEntity.setWalkDelay(200);
    }

    @Override
    public void update(GameContainer gc, int delta) throws SlickException {
        playerIsMoving = false;
        Input input = gc.getInput();
        float rate = delta / 10;
        if (input.isKeyDown(Input.KEY_W)) {
            testEntity.setFacing(CharacterEntity.UP);
            testEntity.setLocationY(testEntity.getLocationY() - moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_D)) {
            testEntity.setFacing(CharacterEntity.RIGHT);
            testEntity.setLocationX(testEntity.getLocationX() + moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_S)) {
            testEntity.setFacing(CharacterEntity.DOWN);
            testEntity.setLocationY(testEntity.getLocationY() + moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_A)) {
            testEntity.setFacing(CharacterEntity.LEFT);
            testEntity.setLocationX(testEntity.getLocationX() - moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_2)) {
            if (moveSpeed != 500) {
                moveSpeed += 1;
            }
        }
        if (input.isKeyDown(Input.KEY_1)) {
            if (moveSpeed > 1) {
                moveSpeed -= 1;
            }
        }
        if (input.isKeyDown(Input.KEY_3)) {
            if (moveSpeed > 1) {
                moveSpeed = 1;
            }
        }
        if (playerIsMoving) {
            testEntity.setState(CharacterEntity.WALK);
        } else {
            testEntity.setState(CharacterEntity.IDLE);
        }
        testEntity.tick(delta);
    }

    @Override
    public void render(GameContainer gc, Graphics g) throws SlickException {
        testEntity.getSprite().draw(testEntity.getLocationX(), testEntity.getLocationY());
    }
}



Any help would be appreciated.
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.093 seconds with 19 queries.