I have an object that I am resizing from bottom to top.
private void setStickSize() {
if (MyInputProcessor.isTap) {
stickSprite.setSize(stickSprite.getWidth(),stickSprite.getHeight()+500.0f);
stickSprite.setY(MathUtils.clamp(stickSprite.getY(),0,700));
// MyInputProcessor.isTap = false;
}
Here the sprite is growing out of the screen after calling this in update().I used clamp() to stop this sticksprite within the screen.But no effects on the code. Why clamp() is not working here? How can I restrict the sprite resizing effectively within the screen?
I am drawing the sprite like this.
private void drawStick() {
stickSprite.setPosition(stick.getX(),stick.getY());
batch.draw(
stickSprite.getTexture(),stick.getX(),stick.getY(),
stickSprite.getWidth()/2 ,stickSprite.getHeight()/2,
stickSprite.getWidth(),
stickSprite.getHeight()*0.01f,
stickSprite.getScaleX(),stickSprite.getScaleY(), 0,
stickSprite.getRegionX(),stickSprite.getRegionY(),
stickSprite.getRegionWidth(), stickSprite.getRegionHeight(),
false,false);
}
Entire gameScreen:
public class GameScreen implements Screen{
// ---objects
private SwatterGame game;
private AssetManager assetManager;
private final ScoreController scoreController;
private ObjectFactory objectFactory;
private Stick stick;
Sprite stickSprite;
// ----constructs
private ShapeRenderer shapeRenderer;
private SpriteBatch batch;
// ----Textures--
Texture bgTexture,platformTexture,stickTexture;
public GameScreen(SwatterGame game) {
this.game = game;
assetManager = game.getAssetManager();
scoreController = game.getScoreController();
}
@Override
public void show() {
loadAssets();
game.viewPort.apply();
game.camera.position.set(GameConstants.WORLD_WIDTH / 2, GameConstants.WORLD_HEIGHT / 2, 0);
game.camera.update();
batch = new SpriteBatch();
shapeRenderer = new ShapeRenderer();
MyInputProcessor myInputProcessor = new MyInputProcessor();
InputMultiplexer im = myInputProcessor.returnInput();
Gdx.input.setInputProcessor(im);
initObjects();
game.camera.zoom =3f; game.camera.update();
}
@Override
public void render(float delta) {
clearScreen();
batchDraw();
update(delta);
drawDebug();
}
private void loadAssets() {
bgTexture = assetManager.get(Assets.background);
stickTexture = new Texture(Gdx.files.internal("rect3.png"));
stickSprite = new Sprite(stickTexture);
}
private void initObjects() {
objectFactory=new ObjectFactory();
player=objectFactory.createPlayer();
stick=objectFactory.createStick();
}
@Override
public void resize(int width, int height) {
game.viewPort.update(width, height);
game.camera.position.set(game.camera.viewportWidth / 2, game.camera.viewportHeight / 2, 0);
}
private void drawDebug() {
shapeRenderer.setProjectionMatrix(game.camera.projection);
shapeRenderer.setTransformMatrix(game.camera.view);
// player
shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
shapeRenderer.setColor(1, 0, 1, 1);
// shapeRenderer.rotate(0.f, 0.f,1.0f, 45.f);
rect(shapeRenderer, player.getCollisionRectangle());
// stick
rect(shapeRenderer, stick.getCollisionRectangle());
shapeRenderer.end();
}
//shape rendering
private void rect(ShapeRenderer renderer, Rectangle rectangle) {
shapeRenderer.rect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
}
private void circle(ShapeRenderer renderer, Circle circle) {
shapeRenderer.circle(circle.x, circle.y, circle.radius, 100);
}
private void update(float delta) {
player.update(delta);
stick.update(delta);
setStickSize();
}
private void batchDraw() {
batch.setProjectionMatrix(game.camera.combined);
batch.begin();
//drawing background
batch.draw(bgTexture,GameConstants.BG_X,GameConstants.BG_Y);
batch.draw(platformTexture, GameConstants.PLATFORM_X,GameConstants.PLATFORM_Y);
//drawBottom();
drawStick();
batch.end();
}
private void setStickSize() {
float newHeight=stickSprite.getHeight() + 500.0f;
if (MyInputProcessor.isTap) {
stickSprite.setSize(stickSprite.getWidth(), newHeight);
// MyInputProcessor.isTap= true;
}
}
private void drawStick() {
stickSprite.setPosition(stick.getX(),stick.getY());
// stickSprite.setSize(stickSprite.getWidth(),stickSprite.getHeight());
stickSprite.draw(batch);
}
private void clearScreen() {
Gdx.gl.glClearColor(Color.GRAY.r, Color.GRAY.g, Color.GRAY.b, Color.GRAY.a);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}