This site requires JavaScript, please enable it in your browser!
Greenfoot back
Michionlion
Michionlion wrote ...

2012/10/5

setRotation(angle + angleDelta) not working?

Michionlion Michionlion

2012/10/5

#
so, i'm trying to make a ship turn, but not instantly - here is my code:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Ship here.
 * 
 * @author Michionlion
 * @version 10/3/2012
 */
public class Ship extends Actor {

    int xPos, yPos, angle;
    private int xDelta, yDelta, angleDelta, destX, destY, destAngle;
    private boolean moving, turning;
    private Player player;
    private int frame;

    public Ship(int xPos, int yPos) {
        this.xPos = xPos;
        this.yPos = yPos;
        //this.player = player;
        
        angleDelta = 0;
        xDelta = 0;
        yDelta = 0;
        moving = false;
        turning = false;
        
        setImage("regShip.png");
    }

    public void addedToWorld() {
        setLocation(xPos, yPos);
        turnTo(204);
    }

    public void act() {
        
        checkDestinations();
        setLocation(xPos + xDelta, yPos + yDelta);
        setRotation(angle + angleDelta);
        frame++;
    }

    public Player getOwner() {
        return player;
    }

    protected void checkDestinations() {
        if (xPos == destX) xDelta = 0;
        if (yPos == destY) yDelta = 0;
        if (angle == destAngle) angleDelta = 0;
        if (angleDelta == 0) turning = false;
        else turning = true;
        if (xDelta == 0 && yDelta == 0) moving = false;
        else moving = true;
    }

    public void moveTo(int x, int y) {

    }

    public void turnTo(int a) {
        if (a < 0 || a > 359) return;
        if (a == angle) return;
        
        if (destAngle < angle) angleDelta = -1;
        else angleDelta = 1;
        destAngle = a;
        turning = true;
    }

}
Not sure what is wrong... originally I had an if / else if, but the else if , even though it was true, never changed the angleDelta. The way I have it now, I can't tell if it does or doesn't change angleDelta, but either way nothing happens - the current angle stays the same. Help?
davmac davmac

2012/10/5

#
I think the problem is that you call 'setRotation(angle + angleDelta)' but you never change 'angle'. So 'angle + angleDelta' is always the same value.
Michionlion Michionlion

2012/10/8

#
ah - thanks, very simple thing I overlooked.
You need to login to post a reply.