java怎么拦截某个对象
280
2022-09-06
TankWar 单机(JAVA版)版本2.3~版本2.4 为坦克画血条
运行结果:
为了在坦克上方画血条 。血条首先要有坐标x,y 宽和高width和height
血量的多少life也要有。
所以新建类Life要有这些参数
Life类如下:
package tankWar;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.geom.Rectangle2D;public class Life { private int x; private int y; private int width=40; private int height=10; private int life; public Life() { super(); // TODO Auto-generated constructor stub } public Life(int x, int y,int life) { super(); this.x = x; this.y = y; this.life=life; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public void draw(Graphics g){ Graphics2D g2=(Graphics2D) g; //画外圈 Rectangle2D r2=new Rectangle2D.Double(x, y-height, width, height); g2.setColor(Color.YELLOW); g2.draw(r2); //根据血量比例画血条 Rectangle2D r=new Rectangle2D.Double(x+1, y-height+1, width*((double)life/100)-1, height-1); g2.setColor(Color.RED); g2.fill(r); }}
起初调试发现,坦克被击中一下 血量就为0 后来想了想 life/100这里。因为life是整形,除以100保留整数为0.所以强转为double
最后在Tank类中画坦克的时候画血条即可。
private void drawEnemyTanks(Graphics g) { // TODO Auto-generated method stub // 画敌方坦克 for (Tank t : enemyTanks) { if (t.isbLive()) { //画坦克 t.draw(g); //画血条 Life life=new Life(t.getX(), t.getY(), t.getLive()); life.draw(g); } else { // 坦克死亡 画爆炸 Bomb b = new Bomb(t.getX() - 50, t.getY() - 30); b.draw(g); enemyTanks.remove(t); } } }
因为我的坦克不在集合里面,自己写
// 画我的坦克 if (myTank.isbLive()) { myTank.draw(g); Life life=new Life(myTank.getX(), myTank.getY(), myTank.getLive()); life.draw(g); } else { // 游戏结束 isGameOn = false; }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~