Witam,
Zacząłem sobie mały projekt w LibGDX i mam mały problem. Wiem jak zrobić żeby po kliknięciu jakiś tam obiekt coś robił.
Ale niestety nie wiem jak podzielić mój GamePlayScreen na dwie części tak żeby po kliknięciu z lewej strony obiekt poruszał się w lewo i analogicznie na prawą stronę.
Ma ktoś może pomysł jak to zrobić ?
- Rejestracja:prawie 9 lat
- Ostatnio:prawie 8 lat
- Postów:42
- Rejestracja:około 10 lat
- Ostatnio:około 5 lat
- Postów:208
Najlepiej będzie chyba reagować na myszkę i sprawdzać pozycję kursora względem pozycji obiektu który chcesz poruszać. Jeżeli kursor jest na lewo od obiektu porusz w lewo jeżeli na prawo to w prawo.
- Rejestracja:około 10 lat
- Ostatnio:około 5 lat
- Postów:208
Niemal wszystko jest możliwe kwestia wymyślenia jak to ma działać. Trzeba pomyśleć z jakiego zdarzenia chcesz skorzystać i napisać trochę kody który to wykona.
- Rejestracja:prawie 9 lat
- Ostatnio:prawie 8 lat
- Postów:42
No rozumiem. Ale nawet z tym wychodzeniem poza ekran próbowałem juz chyba wszystkiego.. np: że jeżeli startowa pozycja obiektu bedzie mniejsza niż 0 to przypisz wartość 0 do xMoveAmmount, które jest u mnie odpowiedzialne za poruszanie się w lewo.
- Rejestracja:około 10 lat
- Ostatnio:około 5 lat
- Postów:208
Wrzuć jakiś kod będzie dużo łatwiej powiedzieć co może nie działać jak trzeba.
- Rejestracja:prawie 9 lat
- Ostatnio:prawie 8 lat
- Postów:42
Klasa Player
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.mygdx.game.MyGame;
public class Player extends Image{
private final static int WIDHT = 77;
private final static int HEIGHT = 152;
private final static int STARTING_X = 200;
private final static int STARTING_Y = 300;
public Player(){
super(new Texture("plane-red-300px.png"));
this.setOrigin(WIDHT / 2, HEIGHT / 2);
this.setSize(WIDHT, HEIGHT);
// starting position
this.setPosition(STARTING_X, STARTING_Y);
}
public void reactOnLeftClick() {
int xMoveAmmount = -20;
int yMoveAmmount = 0;
float moveActionTime = 0.30f;
Action moveAction = Actions.sequence(
Actions.moveBy(xMoveAmmount, yMoveAmmount, moveActionTime)
);
this.addAction(moveAction);
if(this.STARTING_X <= this.getWidth()){
xMoveAmmount = 0;
}
}
public void reactOnRightClick(){
int xMoveRightAmmount = 20;
int yMoveRightAmmount = 0;
float moveRightActionTime = 0.30f;
Action moveRightAction = Actions.sequence(
Actions.moveBy(xMoveRightAmmount, yMoveRightAmmount, moveRightActionTime)
);
this.addAction(moveRightAction);
}
}
A to GamePlayScreen
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.mygdx.game.MyGame;
import com.mygdx.game.entities.Player;
public class GamePlayScreen extends AbstarctScreen {
private Player player;
private Button leftPlayerButton;
private Button rightPlayerButton;
public GamePlayScreen(MyGame game) {
super(game);
}
private void initleftPlayerButton(){
leftPlayerButton = new Button(new ButtonStyle());
leftPlayerButton.setWidth(240);
leftPlayerButton.setHeight(80);
leftPlayerButton.setX(0);
leftPlayerButton.setY(0);
leftPlayerButton.setDebug(true);
stage.addActor(leftPlayerButton);
leftPlayerButton.addListener(new ClickListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
player.reactOnLeftClick();
return super.touchDown(event, x, y, pointer, button);
}
});
}
private void initrightPlayerButton(){
rightPlayerButton = new Button(new ButtonStyle());
rightPlayerButton.setWidth(240);
rightPlayerButton.setHeight(80);
rightPlayerButton.setX(240);
rightPlayerButton.setY(0);
rightPlayerButton.setDebug(true);
stage.addActor(rightPlayerButton);
rightPlayerButton.addListener(new ClickListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
player.reactOnRightClick();
return super.touchDown(event, x, y, pointer, button);
}
});
}
private void initPlayer() {
player = new Player();
stage.addActor(player);
}
public void render(float delta)
{
super.render(delta);
update();
spriteBatch.begin();
stage.draw();
spriteBatch.end();
}
private void update()
{
stage.act();
}
@Override
protected void init() {
initPlayer();
initleftPlayerButton();
initrightPlayerButton();
}
}
- Rejestracja:około 10 lat
- Ostatnio:około 5 lat
- Postów:208
if(this.STARTING_X <= this.getWidth()){
xMoveAmmount = 0;
}
ja to rozumiem tak (jeżeli się mylę to mnie popraw)
jeżeli STARTING_X jest mniejsze równe szerokość obrazka ustaw na pozycję 0
chyba że ja to źle zrozumiałem...
- Rejestracja:prawie 9 lat
- Ostatnio:prawie 8 lat
- Postów:42
Witam,
Jeżeli mam metodę która zwiększa punkty o 1, to jak zrobić aby punkty dodawały się co 1 sekunde ?