2013-11-16 3 views
0

вот весь код для классов Ship, Asteroids, BaseShapeClass. Класс Ship наследует от BaseShapeClass для его формы. Астероид класс является основным источником код, который объявляет объект Graphics2D, AffineTransform (для создания идентичности), объявляет двойной буфер изображения ... Код для BaseShapeClass ..java космический корабль

package baseshapeclass; 
import java.awt.Shape; 


public class BaseShapeClass { 
    private Shape shape; 
    private double x, y; 
    private double velX, velY; 
    private double moveAngle, faceAngle; 
    private boolean alive; 

    //accessors and mutators 
    public Shape getShape(){return shape;} 
    public void setShape(Shape shape){ this.shape = shape; } 

    public double getX() { return x; } 
    public void setX(double x) { this.x = x; } 
    public void incX(double ix) { this.x += ix; } 

    public double getY() { return y; } 
    public void setY(double y) { this.y = y; } 
    public void incY(double iy) { this.y += iy; } 

    public double getVelX() { return velX; } 
    public void setVelX(double velX) { this.velX = velX; } 
    public void incVelX(double ivX) { this.velX += ivX; } 

    public double getVelY() { return velY; } 
    public void setVelY(double velY) { this.velY = velY; } 
    public void incVelY(double ivY) { this.velY += ivY; } 
    //MoveAngle refers to the objects angular movement 
    public double getMoveAngle() { return moveAngle; } 
    public void setMoveAngle(double mAngle) { this.moveAngle = mAngle; } 
    public void incMoveAngle(double imAngle) { this.moveAngle += imAngle; } 
    //FaceAngle refers to the objects face/heads angular movement 
    public double getFaceAngle() { return faceAngle; } 
    public void setFaceAngle(double fAngle) { this.faceAngle = fAngle; } 
    public void incFaceAngle(double ifAngle) { this.faceAngle += ifAngle; } 

    public boolean isAlive() { return alive; } 
    public void setAlive(boolean alive) { this.alive = alive; } 

    //default constructor everything will be set to original state 
    //when update is called everything will start to move 
    BaseShapeClass(){ 
     setShape(null); 
     setAlive(false); 
     //all of them are set to '0' representing their initial position, 
     //which will be called during the update() Event of the graphics objects 
     setX(0.0); 
     setY(0.0); 
     setVelX(0.0); 
     setVelY(0.0); 
     setMoveAngle(0.0); 
     setFaceAngle(0.0); 
    } 
} 

Код для судов класса ...

package baseshapeclass; 
import java.awt.Rectangle; 
import java.awt.Polygon; 
public class Ship extends BaseShapeClass { 
    //ships shape along the x and y cordinates 
    private final int[] shipx = {-6,3,0,3,6,0}; 
    private final int[] shipy = {6,7,7,7,6,-7}; 

    public Rectangle getBounds(){ 
     Rectangle r = new Rectangle((int)getX()-6, (int)getY()-6, 12, 12); 
     return r; 
    } 
    Ship(){ 
     setShape(new Polygon(shipx, shipy, shipx.length)); 
     setAlive(true); 
    } 
} 

код для Asteroid (Основной исходный код) ...

package baseshapeclass; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.geom.*; 
import java.awt.event.*; 
import java.applet.*; 
import java.util.*; 
public abstract class Asteroid extends Applet implements Runnable, KeyListener { 
    BufferedImage backbuffer; 
    Graphics2D g2d; 
    Ship ship = new Ship(); 
    boolean showBounds= true; 
    AffineTransform identity = new AffineTransform(); 

    @Override public void init(){ 
     backbuffer = new BufferedImage(640,480,BufferedImage.TYPE_INT_RGB); 
     g2d = backbuffer.createGraphics(); 

     ship.setX(320); 
     ship.setY(240); 

     addKeyListener(this); 
    } 
    @Override public void update(Graphics g){ 
     g2d.setTransform(identity); 
     g2d.setColor(Color.BLACK); 
     g2d.fillRect(0, 0, getSize().width, getSize().height); 
     g2d.setColor(Color.WHITE); 
     g2d.drawString("Ship: "+Math.round(ship.getX())+" , "+Math.round(ship.getY()),2, 150); 
     g2d.drawString("Face Angle: "+Math.toRadians(ship.getFaceAngle()),5, 30); 
     g2d.drawString("Move Angle: "+Math.toRadians(ship.getMoveAngle())+90,5,50); 

     drawShip(); 
     paint(g); 
    } 
    public void drawShip(){ 
     g2d.setTransform(identity); 
     g2d.translate(ship.getX(),ship.getY()); 
     g2d.rotate(Math.toRadians(ship.getFaceAngle())); 
     g2d.setColor(Color.ORANGE); 
     g2d.fill(ship.getShape()); 
    } 
} 

Я надеюсь, что вы, ребята, получить лучшее представление со всей кодой на месте. Просто хотелось бы знать, со стороны судов класса, почему являются корабли х и у cordinates, такие как под:

public class ship extends BaseShapeClass{ 
private int[] shipx = {-6,3,0,3,6,0}; 
private int[] shipy = {6,7,7,7,6,-7}; 
} 

Я не могу следовать на том, как эти значения будут делать ДО многоугольника ??

+0

'Я точно определяю ту часть, которую я не понимаю.': Вы хотите выбить мяч, но вы не знаете, где это! И почему я знаю, куда идти, чтобы найти свой собственный мяч. – Sage

+0

Откуда у этого кода? Трудно определить, что такое все массивы, не зная контекста. Если это произошло из учебника или что-то в этом роде, наверняка есть какой-то комментарий или документация. Основной ответ заключается в том, что он, по-видимому, используется для создания шестиугольника (или, более общо, многоугольника с 6 вершинами), но не может вам ничего сказать. –

+1

@Teeg Да, это взято из учебника, но в этом нет никаких объяснений! – nishpystoned

ответ

1
Ship(){ 
    setShape(new Polygon(shipx,shipy,shipx.length)); 
    setAlive(true); 
} 

Вы можете видеть, что два массива вы запутались идти в инициализации Polygon. Эти два массива, взятая в качестве пары, дают координаты х и у каждой точки в многоугольнике.

+1

@nishpystoned Отметьте это сообщение [о рисовании многоугольника в java] (http://stackoverflow.com/questions/15188238/about-drawing-a-polygon-in-java). –

+0

Да, я знаю, что он назначен для многоугольника. но я сомневаюсь, почему значения x и y назначаются таким образом? – nishpystoned

0

Это сообщение в ответе на ваш комментарий в ответе Крониона; Я собирался опубликовать его как комментарий, но есть слишком много, чтобы сказать, и я хотел показать вам код, который не так читается в комментариях.

Как сказал Кронион, класс Polygon действительно принимает массив координат X и массив координат Y. Причиной этого является то, что координаты X и Y сохраняются в одной и той же позиции в обоих массивах. Итак, если int index = 0, то координатная пара X, Y будет xArray[index] и yArray[index].

Если это не имеет никакого смысла, изучите Polygon class source code. Например, вы увидите, что это происходит в методе contains, здесь:

for (int i = 0; i < npoints; lastx = curx, lasty = cury, i++) { 

    curx = xpoints[i]; 
    cury = ypoints[i]; 

    // remainder of loop 
} 

Короче говоря, они назначаются таким образом, потому что X и Y являются парными их позиции индекса.

Надеюсь, что это поможет.

+1

спасибо, что уже получил его! – nishpystoned

Смежные вопросы