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 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line