[Fix] Render issue and update camera.
This commit is contained in:
parent
4b2803c7b9
commit
4f08f51ae3
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -161,4 +161,12 @@ public class AnimatedSprite {
|
|||||||
IntRect textureCoordsRect = new IntRect(topX, topY, spriteSize.x, spriteSize.y);
|
IntRect textureCoordsRect = new IntRect(topX, topY, spriteSize.x, spriteSize.y);
|
||||||
return textureCoordsRect;
|
return textureCoordsRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the size of the sprite as a vector.
|
||||||
|
* @return Integer vector containing the sprite size.
|
||||||
|
*/
|
||||||
|
public Vector2i getSpriteSize() {
|
||||||
|
return spriteSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package tfg;
|
|||||||
import org.jsfml.graphics.RenderWindow;
|
import org.jsfml.graphics.RenderWindow;
|
||||||
import org.jsfml.graphics.View;
|
import org.jsfml.graphics.View;
|
||||||
import org.jsfml.system.Vector2f;
|
import org.jsfml.system.Vector2f;
|
||||||
|
import org.jsfml.system.Vector2i;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Camera that can center on various objects.
|
* Camera that can center on various objects.
|
||||||
@ -28,14 +29,18 @@ public class Camera {
|
|||||||
defaultView = (View) window.getDefaultView();
|
defaultView = (View) window.getDefaultView();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void centerOn(AnimatedSprite s) {
|
||||||
* Center the camera on the following position.
|
/* Copy the default view. */
|
||||||
* @param pos Position to center the camera on.
|
|
||||||
* @param step
|
|
||||||
*/
|
|
||||||
public void centerOn(Vector2f pos, float step) {
|
|
||||||
View newView = new View(defaultView.getCenter(), defaultView.getSize());
|
View newView = new View(defaultView.getCenter(), defaultView.getSize());
|
||||||
newView.setCenter(pos);
|
Vector2f spritePos = s.getSprite().getPosition();
|
||||||
|
Vector2i spriteSize = s.getSpriteSize();
|
||||||
|
/* Convert the size to a float. */
|
||||||
|
Vector2f newSpriteSize = new Vector2f(spriteSize.x, spriteSize.y);
|
||||||
|
/* Divide the size in half (for centering). */
|
||||||
|
newSpriteSize = Vector2f.div(newSpriteSize, 2);
|
||||||
|
Vector2f cameraPos = Vector2f.add(spritePos, newSpriteSize);
|
||||||
|
cameraPos = new Vector2f(Math.round(cameraPos.x), Math.round(cameraPos.y));
|
||||||
|
newView.setCenter(cameraPos);
|
||||||
window.setView(newView);
|
window.setView(newView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,20 +50,4 @@ public class Camera {
|
|||||||
public void centerOnDefault() {
|
public void centerOnDefault() {
|
||||||
window.setView(defaultView);
|
window.setView(defaultView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param x0
|
|
||||||
* @param x1
|
|
||||||
* @param m
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public float Lerp(float x0, float x1, float m) {
|
|
||||||
return x0 + m * (x1-x0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) {
|
|
||||||
return new Vector2f(Lerp(v0.x, v1.x, m), Lerp(v0.y, v1.y, m));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import org.jsfml.graphics.Color;
|
|||||||
import org.jsfml.graphics.RenderWindow;
|
import org.jsfml.graphics.RenderWindow;
|
||||||
import org.jsfml.graphics.TextStyle;
|
import org.jsfml.graphics.TextStyle;
|
||||||
import org.jsfml.system.Clock;
|
import org.jsfml.system.Clock;
|
||||||
import org.jsfml.system.Vector2f;
|
|
||||||
import org.jsfml.system.Vector2i;
|
import org.jsfml.system.Vector2i;
|
||||||
import org.jsfml.window.Keyboard;
|
import org.jsfml.window.Keyboard;
|
||||||
import org.jsfml.window.Keyboard.Key;
|
import org.jsfml.window.Keyboard.Key;
|
||||||
@ -158,8 +157,7 @@ public class Game {
|
|||||||
/* The window has automatic double-buffering. */
|
/* The window has automatic double-buffering. */
|
||||||
window.clear();
|
window.clear();
|
||||||
/* Draw each object like layers, background to foreground. */
|
/* Draw each object like layers, background to foreground. */
|
||||||
Vector2f playerPos = player.getSprite().getPosition();
|
camera.centerOn(player.getAnimatedSprite());
|
||||||
camera.centerOn(playerPos, 0);
|
|
||||||
window.draw(player.getMap());
|
window.draw(player.getMap());
|
||||||
window.draw(player);
|
window.draw(player);
|
||||||
camera.centerOnDefault();
|
camera.centerOnDefault();
|
||||||
|
@ -134,8 +134,8 @@ public class Player extends Entity implements Drawable {
|
|||||||
* Get animated sprite.
|
* Get animated sprite.
|
||||||
* @return Animated sprite.
|
* @return Animated sprite.
|
||||||
*/
|
*/
|
||||||
public Sprite getSprite() {
|
public AnimatedSprite getAnimatedSprite() {
|
||||||
return playerSprite.getSprite();
|
return playerSprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user