java 坦克 打第一辆坦克没有爆炸效果

我在写坦克游戏的时候,坦克爆炸的代码:
for(int i=0;i<bs.size();i++)
{
//取出炸弹
Bomb b=bs.get(i);
if(b.life>6)//我给炸弹的初始生命是9
{
System.out.println("进入画图 :b.x="+b.x+" b.y="+b.y);
if(g.drawImage(image1, b.x, b.y, 30, 30, this)){
System.out.println("画图成功");
}

}else if(b.life>3)
{
g.drawImage(image2, b.x, b.y, 30, 30, this);
}else{
g.drawImage(image3, b.x, b.y, 30, 30, this);
}

//让b的生命值减小
b.lifeDown();
if(b.life==0)
{
bs.remove(b);
}

}
我运行打坦克的时候,每次打第一辆坦克,图片都没有画出来,但是“进入画图”又打出来了,为什么第一次画图不成功?

你提供的代码不完全,无法深入分析,但是照你说的有显示“进入画图”,那么,很可能if(g.drawImage(image1, b.x, b.y, 30, 30, this))这个返回值为false,我刚查了下API,它的返回值说明Returns:
false if the image pixels are still changing; true otherwise.另外这个方法有这么样的说明This method returns immediately in all cases, even if the entire image has not yet been scaled, dithered, and converted for the current output device. If the current output representation is not yet complete, then drawImage returns false. 也就是说,现行输出未完成,图像像素仍在变化的时候,你就调用了这方法,那么会返回false。你检查一下代码,在你调用这段代码前,你的初始化工作做好了没。另外,最好就是像1楼说的,把图画到一个bufferImage里,再把bufferImage画到屏幕上
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-06
看的出你是在用j2se的方法画图! j2se有个毛病 图片载入以后经常还是空的,这个空的意思不是说Image对象为null,其实是有对象的,但是你获取Image的getWidth()和getHeight()还是空的,直到你drawImage了一次该对象后才实质的存在
所以解决的办法是:Image对象一载入 就drawImage一次,drawImage到哪里就无所谓了,只要看不到的地方就行,最好是创建一张BufferImage 获取其Graphics bg=BufferImage.getGraphics(),然后用bg绘制该刚载入的Image对象就可以了!
第2个回答  2010-08-06
可能图片数据流没画完呢,就执行下一步操作了,这很正常,所以最好是用双缓冲技术来画图。
第3个回答  2010-08-06
建议你在执行方法处设置一下断点,查看第一次调用方法的时候,传值的情况

仔细检查一下,别急躁

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网