Skip to content
Snippets Groups Projects
Commit 9b224b69 authored by koz01's avatar koz01
Browse files

solution

parent eabbd34d
No related merge requests found
package lab;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class Bullet {
private Point2D position;
private Point2D speed;
private Point2D acceleration;
public Bullet(Point2D position, Point2D speed, Point2D acceleration) {
this.position = position;
this.speed = speed;
this.acceleration = acceleration;
}
public void draw(GraphicsContext gc) {
gc.save();
gc.setFill(Color.SILVER);
gc.fillOval(position.getX(), position.getY(), 10, 10);
gc.restore();
}
public void simulate(double deltaT) {
position = position.add(speed.multiply(deltaT));
speed = speed.add(acceleration.multiply(deltaT));
}
}
package lab;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
public class BulletAnimated {
private final Image image = new Image(this.getClass().getResourceAsStream("fireball-transparent.gif"));
private Point2D position;
private Point2D speed;
private Point2D acceleration;
public BulletAnimated(Point2D position, Point2D speed, Point2D acceleration) {
this.position = position;
this.speed = speed;
this.acceleration = acceleration;
}
public void draw(GraphicsContext gc) {
gc.drawImage(image, position.getX(), position.getY(), 40, 40);
}
public void simulate(double deltaT) {
position = position.add(speed.multiply(deltaT));
speed = speed.add(acceleration.multiply(deltaT));
}
}
package lab;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.transform.Affine;
import javafx.scene.transform.Transform;
public class Cannon {
private Point2D position;
private double angle;
public Cannon(Point2D position, double angle) {
this.position = position;
this.angle = angle;
}
public void draw(GraphicsContext gc) {
gc.save();
gc.setFill(Color.LIGHTSTEELBLUE);
gc.transform(new Affine(Transform.rotate(angle, position.getX(), position.getY())));
gc.fillRect(position.getX(), position.getY(), 60, 20);
gc.restore();
}
public void simulate(double deltaT) {
angle += 15*deltaT;
}
}
......@@ -7,10 +7,15 @@ import javafx.scene.canvas.GraphicsContext;
public class DrawingThread extends AnimationTimer {
private final GraphicsContext gc;
private long lastTime;
private final World world;
private final double height;
private long lastTime;
public DrawingThread(Canvas canvas) {
this.gc = canvas.getGraphicsContext2D();
this.world = new World(canvas.getWidth(), canvas.getHeight());
this.height = canvas.getHeight();
}
/**
......@@ -21,9 +26,15 @@ public class DrawingThread extends AnimationTimer {
if (lastTime > 0) {
double deltaT = (now - lastTime) / 1e9;
// call simulate on world
world.simulate(deltaT);
}
//call draw on world
gc.save();
this.gc.scale(1, -1);
this.gc.translate(0, -height);
world.draw(gc);
lastTime= now;
gc.restore();
}
......
package lab;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class World {
private final double width;
private final double hight;
private final Bullet bullet;
private final BulletAnimated bullet_2;
private final Cannon cannon;
public World(double width, double hight) {
this.width = width;
this.hight = hight;
//create bullet and assign to instance variable
this.bullet = new Bullet(new Point2D(0, 0), new Point2D(30, 30), new Point2D(0, -9.81));
this.bullet_2 = new BulletAnimated(new Point2D(0, 0), new Point2D(40, 70), new Point2D(0, -9.81));
this.cannon = new Cannon(new Point2D(0, 0), 45.0);
}
public void simulate(double deltaT) {
//call simulate on bullet
bullet.simulate(deltaT);
bullet_2.simulate(deltaT);
cannon.simulate(deltaT);
}
public void draw(GraphicsContext gc) {
gc.setFill(Color.BEIGE);
gc.fillRect(0, 0, width, hight);
//call draw on bullet
bullet.draw(gc);
bullet_2.draw(gc);
cannon.draw(gc);
}
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment