簡體   English   中英

如何在沿y軸移動的同時沿其軸旋轉Area對象?

[英]How can I rotate an Area object on its axis while also moving it along the y axis?

因此,我創建了一個Area對象並將其制成4星多邊形。 我想做的是旋轉該對象,同時使其沿y軸平移。 這是我用於創建對象的點的代碼,星星的中心是xloc和yloc,其繪畫功能位於其下方:

double rots = 0.0; int xPoints[] = { 45, 48, 56, 48, 45, 42, 34, 42 }; int yPoints[] = { 56, 47, 45, 43, 34, 43, 45, 47 }; double xloc = 150, yloc = 250;

public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    RenderingHints rh = new RenderingHints( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);    
    g2d.setRenderingHints(rh);

   g2d.translate(xloc, yloc);
   g2d.rotate(rots); 

    g2d.fill(star);
   //yloc += .01;
    rots += .001;

    repaint();  
}

我遇到的問題是繪畫功能。 使用getRotateInstance時,它沿xloc和yloc的軸旋轉。 當這些數字增加時,恆星的旋轉會從其原點開始擴大,以覆蓋整個屏幕。 我能想到的唯一解決方案是更改xPoints []和yPoints [],但到目前為止我還沒有成功。 有另一種方法可以解決此問題,也可以解決我目前遇到的問題嗎?

編輯:所以我取得了一些進展! 我接受了建議,我已經接近了。 我將代碼AffineTransform trans = AffineTransform.getRotateInstance替換為:

AffineTransform trans = new AffineTransform(); trans.setToTranslation(xloc, yloc); trans.rotate(rots);

現在,它可以旋轉並在屏幕上移動,但是盡管它不會圍繞越來越大的視野旋轉,但仍然圍繞着我似乎無法分辨的一點旋轉。 我猜想這與xloc和yloc點的位置有關。 根據我之前的測試,xloc和yloc應該以其原點為中心,以便正確旋轉。 有什么建議么?

編輯2:我收到建議說我應該只使用Graphics2D函數進行平移和旋轉。 我用以下方法更改了AffineTransform語句:

g2d.translate(xloc, yloc); g2d.rotate(rots);

我現在遇到的問題是,雖然恆星確實在平移和旋轉,但它似乎還在進行額外的旋轉。 因此,它現在要做的是在其原點旋轉,並繞一個我無法確定的附加點旋轉,同時還要沿y軸平移。 為了更好地了解它的外觀,可以想象一個行星晝夜旋轉,還繞着恆星盤旋,然后沿一條直線移動。 我已經更新了上面的代碼以反映我的更改。 我怎樣才能解決這個問題?

通過更改double xloc = 150, yloc = 250; 轉換為int xloc = 150, yloc = 250; 它解決了問題。 但是,一切都太快了,所以我添加了一個計時器來減慢速度,僅此而已。

我的猜測是,積分榜的表現不佳。 形狀必須為int形式,因此通過將變量加倍並將其應用於變換,會弄亂它。

暫無
暫無

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

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