-1

三角形を埋めようとしています。私はそれを自分でやろうとしました

g.fillPolygon(Triangle.x1, Triangle.x2, Triangle.x3, Triangle.y1, 
         Triangle.y2, Triangle.y3); 

しかし、私はいくつかのエラーが発生しています。誰でもこれで私を助けることができますか?

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Vehicle extends JFrame

 {
    final int WIDTH = 900; int HEIGHT = 650;



public Vehicle()
    {
        //the following code creates the JFrame
        super("Radical Racing");
        setSize(WIDTH,HEIGHT);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

}
public void paint(Graphics g)
{

    g.setColor(Color.DARK_GRAY);
    g.fillRect(0,0,WIDTH,HEIGHT);


    int x1, y1 ,x2, y2, x3,y3;
    x1 = x2 = x3 = 200;
    y1 = y2 = y3 = 390;

    {
          triangle (g, x1=174, y1, x2=204, y2, x3=189, y3=360);

    }
    g.setColor(Color.green);
    g.fillPolygon(Triangle.x1, Triangle.x2, Triangle.x3, Triangle.y1, Triangle.y2, Triangle.y3);
    triangle(g,x1,y1,x2,y2,x3,y3);
}

void triangle(Graphics g,int x1,int y1,
        int x2, int y2, int x3, int y3){
      g.drawLine (x1, y1, x2, y2);
      g.drawLine (x2, y2, x3, y3);
      g.drawLine (x3, y3, x1, y1);
}



public static void main(String[]args)
    {
        new Vehicle();
    }

}
4

3 に答える 3

2

どういたしまして。時々Oracle Java APIを使用することをお勧めします。それは本当に開発者に優しいです。:)

静的 x1... フィールドを持つ Triangle クラスがないのに、なぜ Triangle.x1...? :) そして、なぜ三角形 () を呼び出す独自のブロックがあるのでしょうか?

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Vehicle extends JFrame {

    final int WIDTH = 900;
          int HEIGHT = 650;

    public Vehicle() {
        // the following code creates the JFrame
        super("Radical Racing");
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

    }
    public void paint(Graphics g) {

        g.setColor(Color.DARK_GRAY);
        g.fillRect(0, 0, WIDTH, HEIGHT);

        int x1, y1, x2, y2, x3, y3;
        x1 = x2 = x3 = 200;
        y1 = y2 = y3 = 390;
        triangle(g, x1 = 174, y1, x2 = 204, y2, x3 = 189, y3 = 360);

        g.setColor(Color.green);
        g.fillPolygon(new int[] {x1, x2, x3}, new int[] {y1, y2, y3}, 3);
        triangle(g, x1, y1, x2, y2, x3, y3);
    }

    void triangle(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3) {
        g.drawLine(x1, y1, x2, y2);
        g.drawLine(x2, y2, x3, y3);
        g.drawLine(x3, y3, x1, y1);
    }

    public static void main(String[] args) {
        new Vehicle();
    }

}
于 2012-05-31T20:08:50.893 に答える
2

nvrfrgt answer は動作し、あなたが持っているバグを修正します (彼に +1 を与えました) が、覚えておく価値のある (そしてコメントするには長すぎた) クリーンアップできることがいくつかあります。

HEIGHT最初に、あなたは最終的なつもりだったと思いますか? それ以外の場合は小文字にします。

たくさんのレーシング トライアングルなどを描画している場合、後で違いが生じる可能性があるパフォーマンスの問題です。同じトライアングルを 2 回描画しているため (x と y の値を決して変更しないでください)、そのうちの 1 つが無駄になります。

triangle (g, x1=174, y1, x2=204, y2, x3=189, y3=360);
...
triangle(g, x1, y1, x2, y2, x3, y3);

x と y の値を初期化した方法も、最もクリーンではありません。それらすべてを特定の数値に設定してから、向きを変えて次の行でそれらを変更します。なぜ初期値があるのですか?とにかく、以下のスニペットは私にとってより理にかなっています(ただし、それでも少し魔法の数が多すぎるようです

int x1 = 174; int x2 = 204; int x3 = 189;
int y1 = 390; int y2 = 390; int y3 = 360;
triangle(g, x1, y1, x2, y2, x3, y3);

三角形を描いて同じ色で塗りつぶす場合は、線を描く必要がないかもしれません (1 ピクセルの違いになりますか?)。その場合は、triangle() 呼び出しを削除するか、三角形の実装を塗りつぶしポリゴンに置き換えることができます。最後に、このようなものはもう少し洗練されています (それでも動作します):

public class Vehicle extends JFrame {

  final int WIDTH = 900;
  final int HEIGHT = 650; // Made this final

  public Vehicle() {
      // the following code creates the JFrame
      super("Radical Racing");
      setSize(WIDTH, HEIGHT);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setVisible(true);
  }

  public void paint(Graphics g) {

    g.setColor(Color.DARK_GRAY);
    g.fillRect(0, 0, WIDTH, HEIGHT);

    int x1 = 174; int x2 = 204; int x3 = 189;
    int y1 = 390; int y2 = 390; int y3 = 360;
    g.setColor(Color.green);
    // Got rid of redundant drawing
    triangle(g, x1, y1, x2, y2, x3, y3);
  }

  void triangle(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3) {
    // Left both the lines and the fill so you could play with color or something.
    g.drawLine(x1, y1, x2, y2);
    g.drawLine(x2, y2, x3, y3);
    g.drawLine(x3, y3, x1, y1);
    g.fillPolygon(new int[] {x1, x2, x3}, new int[] {y1, y2, y3}, 3);
  }

  public static void main(String[] args) {
    // Want to save this as something so you can move it around later
    Vehicle greenTriangle = new Vehicle();
  }
于 2012-05-31T20:47:41.373 に答える