当前位置: 首页 > 知识库问答 >
问题:

如何使所有项目符号删除相交对象

公良玺
2023-03-14

我正在创建一个游戏,当子弹(一个矩形)与下落的矩形相交时,从arraylist中删除矩形,然后用户向矩形射击。现在的问题是,当我快速点击鼠标时,子弹会在飞行中相交,但除了最后一颗运动的子弹外,不会移除任何形状。请有人帮我纠正这个错误。

//class that creates sprite & background
 class CreateImage extends JPanel implements MouseListener{
       ArrayList<fallShape> rect= new ArrayList<fallShape>();
        ArrayList<fallShape1> rect1= new ArrayList<fallShape1>();
         ArrayList<fallShape2> rect2= new ArrayList<fallShape2>();
       ArrayList<Integer> by_poss = new ArrayList<>();
       ArrayList<Integer> bx_poss_motion=new ArrayList<>();

       int x_pos=mousework2.Width/2;
       int y_pos=mousework2.Height-50;
       int bx_pos=mousework2.Width/2;
       int by_pos=mousework2.Height;
       int y_speed=-15;
       int x_speed=(int)Math.random()*10+1;
       int score=0;
       int scoreb=10;
       String failedmess="YOU FAILED";
       //createImage constructor
     public CreateImage(){
         super(true);
      //Background image
      ImageIcon pic=new ImageIcon("ballfall3.jpg");
      //pixMage is a gloal variable of the outer class
      pixMage=pic.getImage();
       MediaTracker tracker = new MediaTracker(this);
            tracker.addImage(pixMage,0);
            try {
              tracker.waitForID(0);
            }
            catch (InterruptedException e)
            {}

      //pixMage=pixMage.getScaledInstance(200,-1,Image.SCALE_DEFAULT);
        setPreferredSize(new Dimension(mousework2.Width,mousework2.Height));
     for(int i=0;i<10;i++){
       rect.add(i,new fallShape(12,12,rect));
      }
     for(int i=0;i<10;i++){
       rect1.add(i,new fallShape1(12,12,rect1));
     }
    for(int i=0;i<10;i++){
       rect2.add(i,new fallShape2(12,12,rect2));
     }

     Toolkit picx=Toolkit.getDefaultToolkit();
    gunMage=picx.getImage("gunner.jpg");
    //gunMage=gunMage.getScaledInstance(200,-1,Image.SCALE_SMOOTH);


      addMouseListener(this);
       addMouseMotionListener(new MouseMotionAdapter(){
       public void mouseMoved(MouseEvent e){
           x_pos=e.getX()-5;
          }
       });
    }
    public void mouseClicked(MouseEvent e){
       if(e.getButton()==1){
          by_poss.add(mousework2.Height);
          bx_pos=e.getX();
          bx_poss_motion.add(bx_pos);
      }


    }
public void paintComponent(Graphics g){
           super.paintComponent(g);
         g.drawImage(pixMage,0,0,Width,Height,null);
           Graphics2D g2=(Graphics2D)g;
           g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
       g.drawImage(gunMage,x_pos,y_pos+5,10,20,null);
       g2.setColor(Color.BLACK);
           Rectangle2D.Float bullet=new Rectangle2D.Float(bx_pos,by_pos+10,3,10);

             for(int i = 0; i < by_poss.size(); i++){
             by_poss.set(i, by_poss.get(i)+y_speed); //move the bullet
              if(by_poss.get(i)>=mousework2.Height){
                   by_poss.clear();
               }
             bullet=new Rectangle2D.Float(bx_poss_motion.get(i),by_poss.get(i),3,10);


            g2.fill(bullet);
            //return;
            //g2.draw(bullet);
       }

       g2.setColor(Color.RED);
       for(fallShape2 b: rect2){
           b.move();
           g2.fill(b);


          for(int i=0;i<10;i++){
        if(bullet.intersects(b)){
             rect2.remove(b);
             click.play();
            score+=scoreb;
          }
        }

          if(b.y>=(mousework2.Height-30)){
             gameOverMessage(g);
               score=score;

            }
        }
       for(fallShape1 b: rect1){
             b.move();
            g2.fill(b);

            for(int i=0;i<10;i++){
           if(bullet.intersects(b)){

               rect1.remove(b);
               click.play();
               score+=scoreb;
             }


           }

           if(b.y>=(mousework2.Height-30)){
               gameOverMessage(g);
                score=score;

            }
        }

        for(fallShape b: rect){
            b.move();
            g2.fill(b);

            for(int i=0;i<10;i++){
         if(bullet.intersects(b)){
              rect.remove(b);
              click.play();
              score+=scoreb;
          }
         }
            if(b.y>=(mousework2.Height-30)){
             gameOverMessage(g);
               score=score;
               //System.out.println(b.y);
            }
         }


         g2.setColor(Color.BLACK);
         g2.setFont(new Font("CALIFORNIAN FB",Font.BOLD,15));
          g2.drawString((score+""),260,10);
         if(new recMove(b).running==false){
            g2.drawString("paused",150,250);
         }
            //boolean onStroke;
      //g2.hit(bullet,rect,onStroke);

}

共有1个答案

申昌勋
2023-03-14

最后,我将我的项目符号添加到另一个arraylist中,然后在测试交叉点时从arraylist中获取项目符号。

 ArrayList<Rectangle2D.Float> bulletStore=new ArrayList<>();
        Rectangle2D.Float bullet;//=new Rectangle2D.Float(bx_pos,by_pos+10,3,10);

      for(int j=0;j<by_poss.size();j++){
        by_poss.set(j, by_poss.get(j)+y_speed); //move the bullet
         bullet=new Rectangle2D.Float(bx_poss_motion.get(j),by_poss.get(j),3,10);
      //Rectangle2D.Float bulletOu=new Rectangle2D.Float(bx_pos,by_pos+10,3,10);

            g2.fill(bullet);
       bulletStore.add(bullet);
            //g2.draw(bullet);
   }



 if(b.intersects(bulletStore.get(j))){
 类似资料:
  • 我试图找出从字符串中删除所有标点符号和空格的正确方法,但保留撇号不变,例如: 不会留下来,但“欲望”会变成“欲望”。 我试过使用

  • 问题内容: 例如: 我可以这样做吗? 问题答案: 一个非常简单的实现是: 并继续添加任何其他类型的标点符号。 一种更有效的方法是 编辑:这里有关于效率和其他实现的更多讨论: 在Python中从字符串中删除标点符号的最佳方法

  • 问题内容: 我试图找到一些可以使用qt布局并从中删除所有内容的东西。只是想像一下窗口是什么样子-我有: 所以我需要可以递归调用的东西,以清除并删除父母的所有东西。我尝试了这里提到的事情(在pyqt中清除布局中的所有小部件),但是它们都不起作用(无论如何都没有标记正确答案)。我的代码如下所示: 但这给出了一个错误: =>编辑这种方法很有效(但是,除了: 问题答案: 清除布局的最安全方法是使用其tak

  • 我有一个数组: 我调用它的拼接函数来删除索引之前的所有项: 我只是好奇有没有类似于splice的功能来移除一个索引后的所有项目: 伪码

  • 我已经在GitLab中创建了几个存储库。其中一个是为了测试目的,有一些提交和分支。我想删除或删除此存储库。我该怎么做呢?

  • 问题内容: 我想删除字符串中的所有前导和尾随标点符号。我怎样才能做到这一点? 基本上,我想保留单词之间的标点符号,并且需要删除所有开头和结尾的标点符号。 ,,,,,允许如果由字母或数字环绕 如果以字母或数字开头,则允许 我试过了 但是没有用! 问题答案: 好。因此,基本上,您想在字符串中找到某种模式,如果模式匹配,则采取措施。 这样做幼稚的方式将是乏味的。幼稚的解决方案可能涉及类似 如果您想做一些