Advertisement
Guest User

JavaFX Test

a guest
Dec 7th, 2014
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.92 KB | None | 0 0
  1. //JavaFX test by SlinkyRaptor
  2. //used with Generic Java Importer for Spriter
  3. package com.brashmonkey.spriter.tests.backend;
  4.  
  5. import java.io.IOException;
  6. import java.nio.file.Files;
  7. import java.nio.file.Paths;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10.  
  11. import javafx.animation.AnimationTimer;
  12. import javafx.application.Application;
  13. import javafx.scene.Group;
  14. import javafx.scene.Scene;
  15. import javafx.scene.canvas.Canvas;
  16. import javafx.scene.canvas.GraphicsContext;
  17. import javafx.scene.image.Image;
  18. import javafx.scene.paint.Color;
  19. import javafx.scene.transform.Rotate;
  20. import javafx.stage.Stage;
  21.  
  22. import com.brashmonkey.spriter.Data;
  23. import com.brashmonkey.spriter.Drawer;
  24. import com.brashmonkey.spriter.FileReference;
  25. import com.brashmonkey.spriter.Loader;
  26. import com.brashmonkey.spriter.Player;
  27. import com.brashmonkey.spriter.SCMLReader;
  28. import com.brashmonkey.spriter.Timeline.Key.Object;
  29.  
  30. public class JavaFXTest extends Application{
  31.     // javafx objects
  32.     private AnimationTimer animTimer;
  33.     private Canvas gameCanvas = new Canvas(1280,720);
  34.    
  35.     // spriter objects
  36.     Player player;
  37.     ImageDrawer drawer;
  38.     Loader<Image> loader;
  39.  
  40.     @Override
  41.     public void start(Stage stage) throws Exception {
  42.         Group gameNode = new Group(gameCanvas);
  43.         Scene gameScene = new Scene(gameNode);
  44.        
  45.         stage.setFullScreen(false);
  46.         stage.setScene(gameScene);
  47.         stage.show();
  48.        
  49.         initialize();
  50.        
  51.         animTimer = new AnimationTimer() {
  52.             @Override
  53.             public void handle(long arg0) {
  54.                 gameLoop();
  55.             }
  56.         };
  57.         animTimer.start();
  58.     }
  59.    
  60.     private void gameLoop() {
  61.         player.update();
  62.        
  63.         //clear canvas before redraw
  64.         gameCanvas.getGraphicsContext2D().clearRect(0, 0, gameCanvas.getWidth(), gameCanvas.getHeight());
  65.        
  66.         //draw
  67.         drawer.draw(player);
  68.         drawer.drawBones(player);
  69.         drawer.drawBoxes(player);
  70.     }
  71.    
  72.     private void initialize() {
  73.         String xmlSCML = null;
  74.         try {
  75.             xmlSCML = new String(Files.readAllBytes(Paths.get("assets/monster/basic_002.scml")));
  76.         } catch (IOException ex) {
  77.             Logger.getLogger(JavaFXTest.class.getName()).log(Level.SEVERE, null, ex);
  78.         }
  79.         Data data = new SCMLReader(xmlSCML).getData();
  80.         player = new Player(data.getEntity(0));
  81.         player.setPosition(640, 360);
  82.         this.loader = new Loader<Image>(data) {
  83.            
  84.             @Override
  85.             protected Image loadResource(FileReference ref) {
  86.                 return new Image("file:" + super.root+"/"+data.getFile(ref).name);
  87.             }
  88.         };
  89.         this.loader.load("assets/monster");
  90.        
  91.         drawer = new ImageDrawer(loader, gameCanvas);
  92.     }
  93.    
  94.     public static void main(String args[]) {
  95.         launch(args);
  96.     }
  97.  
  98.     private class ImageDrawer extends Drawer<Image>{
  99.         Canvas can;
  100.         GraphicsContext gc;
  101.        
  102.         public ImageDrawer(Loader<Image> loader, Canvas can) {
  103.             super(loader);
  104.             this.can = can;
  105.             gc = can.getGraphicsContext2D();
  106.         }
  107.    
  108.         @Override
  109.         public void setColor(float r, float g, float b, float a) {
  110.             gc.setStroke(new Color(r,g,b,a));
  111.         }
  112.    
  113.         @Override
  114.         public void line(float x1, float y1, float x2, float y2) {
  115.             gc.strokeLine((int)x1, (int)can.getHeight() - y1, (int)x2, (int)can.getHeight() - y2);
  116.         }
  117.    
  118.         @Override
  119.         public void rectangle(float x, float y, float width, float height) {
  120.             gc.strokeRect((int)x, (int)can.getHeight() - y, (int)width, (int)height);
  121.         }
  122.    
  123.         @Override
  124.         public void circle(float x, float y, float radius) {
  125.             gc.strokeOval((int)(x-radius), (int)can.getHeight() - (y-radius), (int)radius, (int)radius);
  126.         }
  127.    
  128.         @Override
  129.         public void draw(Object object) {
  130.             Image sprite = loader.get(object.ref);
  131.             draw(sprite, object.position.x, object.position.y, object.pivot.x, object.pivot.y, object.scale.x, object.scale.y, object.angle, object.alpha);
  132.         }
  133.        
  134.         public void draw(Image image, float x, float y, float pivot_x, float pivot_y, float scale_x, float scale_y,
  135.                 float angle, float alpha) {
  136.             drawRotatedImage(gc, image, -angle, x, y, pivot_x, pivot_y, scale_x, scale_y);
  137.         }
  138.        
  139.         private void drawRotatedImage(GraphicsContext gc, Image image, double angle, double x, double y, double pivot_x, double pivot_y, double scale_x, double scale_y) {
  140.             gc.save(); // saves the current state on stack, including the current transform
  141.             double newPivotX = (image.getWidth() * pivot_x);
  142.             double newX = x - newPivotX;
  143.            
  144.             double newPivotY = (image.getHeight() * pivot_y);
  145.             double newY = (gc.getCanvas().getHeight() - y) - (image.getHeight() - newPivotY);
  146.            
  147.             rotate(gc, angle, x, (gc.getCanvas().getHeight() - y));
  148.            
  149.             gc.drawImage(image, newX, newY, image.getWidth()*scale_x, image.getHeight()*scale_y);
  150.             gc.restore(); // back to original state (before rotation)
  151.         }
  152.        
  153.         private void rotate(GraphicsContext gc, double angle, double px, double py) {
  154.             Rotate r = new Rotate(angle, px, py);
  155.             gc.setTransform(r.getMxx(), r.getMyx(), r.getMxy(), r.getMyy(), r.getTx(), r.getTy());
  156.         }
  157.     }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement