射击游戏中子弹穿过敌人时paintComponent()多次调用原因咨询
问题解答
你的猜测不正确。Swing里的paintComponent()方法,和组件是否相交没有直接关联,它的调用主要由这些情况触发:
- Swing的渲染机制判定组件需要更新时,比如组件的位置、大小发生变化,或者组件被遮挡后重新显示
- 当你移动子弹(JLabel)时,肯定是在不断调用
setLocation()之类的方法改变它的位置,每一次位置变动都会触发子弹自身,以及它覆盖到的父组件、重叠组件的重绘请求,这才是paintComponent()被持续调用的原因。
说白了,子弹移动过程中每一次位置更新,都会让Swing标记相关区域需要重绘,而敌人JPanel和子弹当前位置重叠时,也会被纳入重绘范围,所以你会看到paintComponent()一直调用到子弹完全穿过——本质是子弹移动触发的连续重绘,根本不是什么组件相交的默认碰撞检测逻辑在起作用。
内容的提问来源于stack exchange,提问作者NinaJava
相关产品推荐
相关产品推荐

