簡體   English   中英

如何在小行星程序中顯示我的太空飛船?

[英]How can I show my spaceship in my asteroid program?

我正在嘗試完成一個小行星項目。 我有四節課。 小行星,多邊形,游戲和星號。 我正在制造一艘新船,這是船的子類。 我是Java新手。 我試圖制作一個新的飛船對象,但無法使其出現在屏幕上。 https://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html但是,在船級中,我使用fillPolygon現在顯示在屏幕上。 但是我知道寫方法。 我該如何使用飛船對象使飛船顯示出來。 我在下面提供我的課程。

 package asteroids;

/*
CLASS: Asteroids
DESCRIPTION: Extending Game, Asteroids is all in the paint method.
NOTE: This class is the metaphorical "main method" of your program,
   it is your control center.
Original code by Dan Leyzberg and Art Simon
*/
import java.awt.*;
import java.awt.event.*;

class Asteroids extends Game {
   static int counter = 0;

public Asteroids() {
  super("Asteroids!",800,600);
  this.setFocusable(true);
  this.requestFocus();
 }

public void paint(Graphics brush) {
    brush.setColor(Color.black);
    brush.fillRect(0,0,width,height);

    // sample code for printing message for debugging
    // counter is incremented and this message printed
    // each time the canvas is repainted
    counter++;
    brush.setColor(Color.white);
    brush.drawString("Counter is " + counter,10,10);
    ship p = new ship(
            new Point[] {new Point(1,1),new Point(3,1),new Point(1.5,2)},
            new Point(3,3),
            0);


    brush.setColor(Color.red);
    p.paint(brush );

 }

public static void main (String[] args) {
    Asteroids a = new Asteroids();

    a.repaint();










   }
}  

多邊形類

enter code herepackage asteroids;

/*

類:多邊形描述:多邊形是空間中的一系列點,這些點由一組這樣的點,偏移和旋轉定義。 偏移量是形狀的原點和中心之間的距離。 旋轉度數為0-360。 用法:您打算用一組永遠定義其形狀的點實例化該類,然后通過重新定位和旋轉該形狀來對其進行修改。 在定義形狀時,將使用您提供的點的相對位置,換句話說:{(0,1),(1,1),(1,0)}與{(9,10) ,(10,10),(10,9)}。

class Polygon {
  private Point[] shape;   // An array of points.
  public Point position;   // The offset mentioned above.
  public double rotation; // Zero degrees is due east.

 public Polygon(Point[] inShape, Point inPosition, double inRotation) {
    shape = inShape;
    position = inPosition;
    rotation = inRotation;

   // First, we find the shape's top-most left-most boundary, its origin.
    Point origin = shape[0].clone();
    for (Point p : shape) {
  if (p.x < origin.x) origin.x = p.x;
  if (p.y < origin.y) origin.y = p.y;
 }

// Then, we orient all of its points relative to the real origin.
   for (Point p : shape) {
     p.x -= origin.x;
     p.y -= origin.y;
  }
}


  // "getPoints" applies the rotation and offset to the shape of the polygon.
   public Point[] getPoints() {
   Point center = findCenter();
   Point[] points = new Point[shape.length];
    for (int i = 0; i < shape.length; i++) {
    for (Point p : shape) {
      Point p = shape[i];
       double x = ((p.x-center.x) * Math.cos(Math.toRadians(rotation)))
           - ((p.y-center.y) * Math.sin(Math.toRadians(rotation)))
           + center.x/2 + position.x;
  double y = ((p.x-center.x) * Math.sin(Math.toRadians(rotation)))
           + ((p.y-center.y) * Math.cos(Math.toRadians(rotation)))
           + center.y/2 + position.y;
  points[i] = new Point(x,y);
  }
  return points;
 }

  // "contains" implements some magical math (i.e. the ray-casting algorithm).
 public boolean contains(Point point) {
  Point[] points = getPoints();
  double crossingNumber = 0;
   for (int i = 0, j = 1; i < shape.length; i++, j=(j+1)%shape.length) {
    if ((((points[i].x < point.x) && (point.x <= points[j].x)) ||
       ((points[j].x < point.x) && (point.x <= points[i].x))) &&
      (point.y > points[i].y + (points[j].y-points[i].y)/
       (points[j].x - points[i].x) * (point.x - points[i].x))) {
    crossingNumber++;
  }
 }
return crossingNumber%2 == 1;
}

 public void rotate(int degrees) {rotation = (rotation+degrees)%360;}

 /*
 The following methods are private access restricted because, as this access
 level always implies, they are intended for use only as helpers of the
 methods in this class that are not private. They can't be used anywhere else.
 */

 // "findArea" implements some more magic math.
 private double findArea() {
   double sum = 0;
    for (int i = 0, j = 1; i < shape.length; i++, j=(j+1)%shape.length) {
    sum += shape[i].x*shape[j].y-shape[j].x*shape[i].y;
  }
  return Math.abs(sum/2);
  }

 // "findCenter" implements another bit of math.
 private Point findCenter() {
  Point sum = new Point(0,0);
   for (int i = 0, j = 1; i < shape.length; i++, j=(j+1)%shape.length) {
     sum.x += (shape[i].x + shape[j].x)
           * (shape[i].x * shape[j].y - shape[j].x * shape[i].y);
    sum.y += (shape[i].y + shape[j].y)
           * (shape[i].x * shape[j].y - shape[j].x * shape[i].y);
   }
    double area = findArea();
   return new Point(Math.abs(sum.x/(6*area)),Math.abs(sum.y/(6*area)));
 }

}船級包裹小行星;

import java.awt.Color;
import java.awt.Graphics;

public class ship extends Polygon{
  static int counter=0;

   public ship(Point[] inShape, Point inPosition, double inRotation) {
       super(inShape, inPosition, inRotation);
        // TODO Auto-generated constructor stub
   }

   public void paint(Graphics brush) {
        brush.fillPolygon(new int []{400,380,380,420,420,400},new int[]    {300,320,360,360,320,300},6); 

 }


public void drawPolygon(Point[] points, Point point, int i) {
    // TODO Auto-generated method stub

}

}

 Any help will be appreciated ,thanks

小行星應直接或間接(通過Game)擴展JFrame。

實例化應擴展JFrame的Asteroids類后,請執行以下操作:

asteroid.setVisible(true);

將出現一個新的jpanel,並且您的繪制方法將在該jpanel的畫布上繪制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM