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 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 求fpga交通信号灯设计Verilog代码
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头