RORlin123 2021-06-08 00:35 采纳率: 66.7%
浏览 28
已采纳

求救,为啥setY()值没有赋值成功,不在paint()方法中new Hero()反而可以赋值

  1. public class MyPanel extends JFrame {
    	
    	private Panel panel= new Panel();
    	
    	public MyPanel(){
    		super();
    		this.setBounds(300, 200, 450, 500);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.addKeyListener(panel);
    		this.add(panel );
    		this.setVisible(true);
    
    		
    	}
    	
    
    }
    class Panel extends JPanel implements KeyListener{
    	private  Hero hero;
    
    	@Override
    	public void paint(Graphics g) {
    		super.paint(g);
    		g.fillRect(0, 0, 450, 500);
    		//画x英雄坦克
    	    hero=new Hero(50, 100,  0);
    		System.out.println(hero);
    		drawTanke(hero, g);
    			
    		
    	}
    	
    	public void drawTanke(Hero t,Graphics g) {
    		
    		switch (t.getFangxiang()) {
    		
    			case 0: {
    				g.setColor(Color.YELLOW);
    				g.fill3DRect(t.getX(), t.getY(), 10, 60, false);
    				g.fill3DRect(t.getX()+30, t.getY(), 10, 60, false);
    				g.fill3DRect(t.getX()+10, t.getY()+18, 20, 25, false);
    				g.fillOval(t.getX()+10, t.getY()+18, 20,25);
    				g.fill3DRect(t.getX()+18, t.getY(), 5, 21, false);
    				
    			}
    			default:
    			
    		}
    		
    		
    		
    	}
    
    	@Override
    	public void keyTyped(KeyEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void keyPressed(KeyEvent e) {
    		System.out.println("按下了" +e.getKeyCode());
    		
    		if (e.getKeyCode()==38 && hero !=null) {
    			
    			System.out.println(hero);
    	
    			int y = hero.getY();
    			System.out.println(y);
    			y =--y;
    			System.out.println(y);
    			hero.setY(y);
    			
    			
    			
    		}
    		repaint();
    	}
输出结果

Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
  • 写回答

1条回答 默认 最新

  • zhshchilss 2021-06-08 18:15
    关注

    每次paint你都new了一个对象给hero,永远是50,100,0,用一个不行吗
    private Hero hero = new Hero();
    直接初始化,

    或者paint

    if(hero != null){

    hero = new Hero() ;

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。