Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

シューティングについて

javaでSTGを作ろうと思っています。
現在は自機の移動と弾一発、発射できます。
しかし、左斜め上に移動している時だけ弾が発射しません。他の方向に移動している時は弾がでます。
原因が分かれば教えてください。

import java.awt.*;
import java.awt.event.*;

public class Stg extends Frame implements Runnable,KeyListener{
     
        Image pi=getToolkit().getImage("test.png");
    Image tama=getToolkit().getImage("06.png");    
        Image black=getToolkit().getImage("black.jpg");
        int px=300,py=450,tx,ty=-100;
        int key[]=new int[5];

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

    }
    public Stg(){
          Thread t;
              setSize(800,500);
              setVisible(true);              
              addWindowListener(new Ada());
          addKeyListener(this);
         t = new Thread(this);
              t.start();

        }
    public void run(){
        try{
            while(true){
                action();
                repaint();
                Thread.sleep(20);
            }
        }catch(Exception e){}
    }
    public void update(Graphics g){
        paint(g);    
    }
    
        public void paint(Graphics g){
    g.drawImage(black,0,0,this);
        g.drawImage(pi,px,py,this);
    g.drawImage(tama,tx+24,ty,this);                
        }
  
   public void action(){
     Dimension d = getSize();

      if(key[0] == 1){
        py -=4;
         
         if(py < 0){
            py = 0;
         }
      }

      
      if(key[1] == 1){
         py +=4;
        
         if(py > d.height){
            py = d.height;
         }
      }

   
      if(key[2] == 1){
         px -=4;
        
         if(px < 0){
            px = 0;
         }
      }

    
      if(key[3] == 1){
         px +=4;

         if(px > d.width){
            px = d.width;
         }
      }

    if(ty==-100){            
      if(key[4] == 1){
         tx=px;
     ty=py;
      }}
    if(ty>0){
      ty-=5;
     }
     if(ty<1){
          ty=-100;
      }    
   }
    
   public void keyTyped(KeyEvent e){
   }
    public void keyPressed(KeyEvent e){
        int keyn;
        keyn=e.getKeyCode();
        
        switch(keyn){
        
        case KeyEvent.VK_UP:
            key[0]=1;
             break;
      
              case KeyEvent.VK_DOWN:
                 key[1] =1;
         break;
      
              case KeyEvent.VK_LEFT:
                     key[2] =1;
                 break;
      
              case KeyEvent.VK_RIGHT:
                     key[3] =1;
                 break;
        case KeyEvent.VK_SPACE:
               key[4]=1;
           break;
        }
    }
 public void keyReleased(KeyEvent e){
      int keyn;

      keyn=e.getKeyCode();

      switch(keyn){

      case KeyEvent.VK_UP:
         key[0] =0;
         break;

      case KeyEvent.VK_DOWN:
         key[1] =0;
         break;

      case KeyEvent.VK_LEFT:
         key[2] =0;
         break;
 
      case KeyEvent.VK_RIGHT:
         key[3] =0;
         break;
     
      case KeyEvent.VK_SPACE:
         key[4] =0;
         break;
      }

   }
}
class Ada extends WindowAdapter
{
    public void windowClosing(WindowEvent e){

       System.exit(0);
    }
}

3

回答

6515

閲覧

3件の回答

評価

10

おや?一回回答書いたんだが、その後質問ごと削除か?
それはコードの問題じゃなくてキーボード自体の問題だから
解決はできんよ、ということだったんだが。

評価

0

ありがとうがざいます。
質問者です。
違うキーボードでやってみたらちゃんとできました。
キーボードによって同時入力出来る文字と出来ない文字があるみたいですね。勉強になんりました。
またおねがいします。。。

評価

0

消えたのと同じこと書くけど。
うち(Majestouch)では矢印2つとスペースは同じく
ダメだったが、矢印2つとAキーはいけた。
中級以下のキーボードは、同時押しされやすいパターンを
意識してチップを設計してるってことだろう。

高級キーボードは、いくつでもOKなものも。
ただ、今いくつ押されているか?は、USBキーボードでは
プロトコルの関係で取得できないそうな。
かつて主流だったPS/2キーボードだといけるらしい。

ドライバにもよるみたいだけど。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。