前提・実現したいこと
現在、独学でシューティングゲームを作っています。その際に玉(JPanel
)を斜めに動かす必要があります。もし角度が45°であれば各座標を定める変数に1ずつ足せばいい(ソースコード①のBall
クラスのgo
メソッド)と思うのですが、その角度がもっと斜めだった場合にどうすればいいのかわかりません。案としてソースコード②が思いついたのですが、他にいい方法はありませんか?
ソースコード②はsetLocation
をする際に数値を1/10にすることで精度を保っているつもりです。
また、他にソースコードの改善点があれば教えてください。
元のソースオード①
Java
1import javax.swing.*; 2import java.awt.*; 3public class Main{ 4 public static void main(String[] args){ 5 new Main(); 6 } 7 Main(){ 8 Game f = new Game(); 9 f.setVisible(true); 10 while(true){ 11 long st = System.currentTimeMillis(); 12 13 f.ball.go(f.fx,f.fy); 14 15 long en = System.currentTimeMillis(); 16 try{ 17 Thread.sleep(1000/f.fps-(en-st)); 18 }catch(Exception ex){ 19 System.out.println("<Error> +"+(1000/f.fps-(en-st))+"ms"); 20 } 21 } 22 } 23} 24class Game extends JFrame{ 25 int fps = 60; 26 int fx=500,fy=500; //フレームサイズ 27 Ball ball; 28 Game(){ 29 setTitle("ゲーム画面"); 30 setSize(fx+14,fy+37); 31 setLocationRelativeTo(null); 32 setLayout(null); 33 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 34 setBackground(Color.white); 35 36 ball = new Ball(); 37 add(ball); 38 } 39} 40class Ball extends JPanel{ 41 int x=0,y=0; //座標 42 Ball(){ 43 setBounds(x,y,10,10); 44 setBackground(Color.black); 45 } 46 void go(int fx,int fy){ 47 if(fx==x || fy==y){ 48 x=0; 49 y=0; 50 } 51 x++; 52 y++; 53 setLocation(x,y); 54 } 55}
変更点②
Java
1class Ball extends JPanel{ 2 int x=0,y=0; //座標 3 Ball(){ 4 setBounds(x,y,10,10); 5 setBackground(Color.black); 6 } 7 void go(int fx,int fy){ 8 if(fx==x/10 || fy==y/10){ 9 x=0; 10 y=0; 11 } 12 x+=9; 13 y+=3; 14 setLocation(x/10,y/10); 15 } 16}
補足情報(FW/ツールのバージョンなど)
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/04 01:12