我正在创建一个游戏,当子弹(一个矩形)与下落的矩形相交时,从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);
}
最后,我将我的项目符号添加到另一个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中创建了几个存储库。其中一个是为了测试目的,有一些提交和分支。我想删除或删除此存储库。我该怎么做呢?
问题内容: 我想删除字符串中的所有前导和尾随标点符号。我怎样才能做到这一点? 基本上,我想保留单词之间的标点符号,并且需要删除所有开头和结尾的标点符号。 ,,,,,允许如果由字母或数字环绕 如果以字母或数字开头,则允许 我试过了 但是没有用! 问题答案: 好。因此,基本上,您想在字符串中找到某种模式,如果模式匹配,则采取措施。 这样做幼稚的方式将是乏味的。幼稚的解决方案可能涉及类似 如果您想做一些