Как сориентировать дуло пистолета? [JavaFX] - PullRequest
0 голосов
/ 06 ноября 2018

Я создаю игру, в которой вы используете оружие и играете против компьютера / кого-то еще. Вы можете сориентировать этот пистолет с помощью ползунка. Но мне не удается сориентировать дуло пистолета. Я пробовал по-разному, ничего не получилось, как ожидалось Я немного погуглил, но не нашел ничего, что работало, и ничего, что, похоже, могло бы сработать. Поэтому я спрашиваю вас, что я еще не пробовал? Что я должен делать по-другому?

Вот картинка, объясняющая, что я сказал:

Ожидания

Вот соответствующий код:

package canons;

import javafx.scene.Parent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;

public class Canon extends Parent {
    private int posX = 500; // x position of the gun
    private int posY = 250; // y position of the gun
    private int tailleCorps = 20; // size of the body
    private Rectangle buse; // muzzle
    private Circle corps; // body

    public Canon(Color couleurCorps, Color couleurBuse) {
        this.getChildren().addAll(getBuse(), getCorps());
        this.setTranslateX(posX);
        this.setTranslateY(posY);
    }

    public Rectangle getBuse() {
        if(buse == null) { // verify if they aren't created yet. Security.
            buse = new Rectangle();
            buse.setWidth(70);
            buse.setHeight(20);
            buse.setArcWidth(15); // round extremities
            buse.setArcHeight(30);
            buse.setFill(Color.BLACK);
            buse.setTranslateX(posX);
            buse.setTranslateY(posY + tailleCorps/4);
        }    
        return buse;
    }

    public Circle getCorps() {
        if(corps == null) { // verify if they aren't created yet. Security.
            corps = new Circle(tailleCorps);
            corps.setTranslateX(posX);
            corps.setTranslateY(posY);
        }
        return corps;
    }
}

Если я не был достаточно ясен, пожалуйста, не стесняйтесь задавать мне любые другие вопросы по моей проблеме / коду. Спасибо.

РЕДАКТИРОВАТЬ:

Использование buse.getTransforms.add (новый поворот (угол, х, у));

РЕДАКТИРОВАТЬ 2:

Я все еще не нашел способ заставить это работать ... Я отправил ответ, где я показываю то, что я имею сейчас. Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Я нашел другое решение, и на данный момент это лучшее, что я нашел. Это не то, что я хочу, а то, что выглядит больше всего.

Итак, вот код:

package canons;

import javafx.scene.Parent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;

public class Canon extends Parent {
    private int posX = 500, posY = 250;
    private double valeurAngle;
    private Rectangle buse;
    private Circle corps, obus;

    public Canon(Color couleurCorps, Color couleurBuse) {
        this.getChildren().addAll(getBuse(), getCorps());
        this.setTranslateX(posX);
        this.setTranslateY(posY);
    }

    public Rectangle getBuse() {
        if(buse == null) { // sécurité, évite de recréer plusieurs fois le même objet
            buse = new Rectangle();
            buse.setWidth(60);
            buse.setHeight(20);
            buse.setArcWidth(15); // extrémités arrondies
            buse.setArcHeight(30);
            buse.setFill(Color.BLACK);
            buse.setTranslateX(posX);
            buse.setTranslateY(posY - buse.getHeight() / 2);
        }
        return buse;
    }

    public Circle getCorps() {
        if(corps == null) { // sécurité, évite de recréer plusieurs fois le même 
            corps = new Circle(20);
            corps.setTranslateX(posX);
            corps.setTranslateY(posY);
        }
        return corps;
    }

    public void orienter(double angle) {
        Rotate rotate = new Rotate();
        rotate.setPivotX(buse.getX()); //Pivot X Top-Left corner
        rotate.setPivotY(buse.getY()); //Pivot Y
        rotate.setAngle(angle); //Angle degrees
        buse.getTransforms().add(rotate);
        valeurAngle = angle;
    }

И вот что у меня есть:

Первый пример

Второй пример

Третий пример

Четвертый пример

Еще один

Последний

Надеюсь, теперь у вас есть лучшее представление о том, что я имею в виду. Спасибо.

...