⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 impactupdater.java

📁 CroftSoft Code Library是一个开源的可移植的纯Java游戏库
💻 JAVA
字号:
     package com.croftsoft.apps.sprite;

     import java.awt.Rectangle;
     import javax.swing.Icon;
     import javax.swing.JComponent;

     import com.croftsoft.core.animation.Clock;
     import com.croftsoft.core.animation.ComponentUpdater;
     import com.croftsoft.core.animation.sprite.IconSprite;
     import com.croftsoft.core.lang.NullArgumentException;

     /*********************************************************************
     * Switches the Sprite Icon based upon heading changes.
     *
     * @version
     *   2002-03-23
     * @since
     *   2002-02-24
     * @author
     *   <a href="http://www.croftsoft.com/">David Wallace Croft</a>
     *********************************************************************/

     public final class  ImpactUpdater
       implements ComponentUpdater
     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////
     {

     private final IconSprite  iconSprite;

     private final Icon        normalIcon;

     private final Icon        impactIcon;

     private final long        impactDuration;

     private final Clock       clock;

     private final Rectangle   repaintRegion;

     //

     private double   oldHeading;

     private long     lastImpactTime;

     private boolean  isImpacted;

     private Icon     icon;

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public  ImpactUpdater (
       IconSprite  iconSprite,
       Icon        normalIcon,
       Icon        impactIcon,
       long        impactDuration,
       Clock       clock )
     //////////////////////////////////////////////////////////////////////
     {
       NullArgumentException.check ( this.iconSprite = iconSprite );

       NullArgumentException.check ( this.normalIcon = normalIcon );

       NullArgumentException.check ( this.impactIcon = impactIcon );

       this.impactDuration = impactDuration;

       NullArgumentException.check ( this.clock      = clock      );

       repaintRegion = new Rectangle ( );
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public void  update ( JComponent  component )
     //////////////////////////////////////////////////////////////////////
     {
       long  updateTimeNanos = clock.currentTimeNanos ( );

       if ( iconSprite.getHeading ( ) != oldHeading )
       {
         oldHeading = iconSprite.getHeading ( );

         icon = impactIcon;

         lastImpactTime = updateTimeNanos;

         isImpacted = true;
       }
       else if ( isImpacted
         && ( updateTimeNanos >= lastImpactTime + impactDuration ) )
       {
         icon = normalIcon;

         isImpacted = false;
       }
       else
       {
         return;
       }

       if ( icon == iconSprite.getIcon ( ) )
       {
         return;
       }

       iconSprite.getPaintBounds ( repaintRegion );

       component.repaint ( repaintRegion );

       iconSprite.setIcon ( icon );

       iconSprite.getPaintBounds ( repaintRegion );

       component.repaint ( repaintRegion );
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -