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

📄 donghua.java

📁 HappyTreeFriends手机游戏的源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            int[] animationpanYis = new int[animationCount+1];
            for (int i = 0; i < animationCount+1; i++)
            {
                animationpanYis[i] = Xiyou.ReadUnsignedShort(dis);
            }
            if (s_anims == null)
                s_anims = new Donghua[animationCount];		
            for (int i = 0; i < animationCount; i++)
            {           
                if (((1 << i) & mask) == 0)
                {
                    
                    dis.skip(animationpanYis[i + 1] - animationpanYis[i]);
                    if (s_anims[i] != null)
                    {
                        s_anims[i].Free();
                        s_anims[i] = null;
                    }
                }
                else if (s_anims[i] == null)
                {
                    
                    Donghua a = new Donghua();
                    s_anims[i] = a;
                    a.m_ID = i;
                    a.Load(dis);
                    a.LoadGfx();
		Debug.Mem("Loadanimation: " + i );			
                }
            }		
            dis.close();
            dis = null;
            FreeUnusedPngImages();
            
          
        }
        catch (Exception e)
        {
            Debug.PrintException(e);
        }
    }

    private void Load(DataInputStream dis) throws Exception
    {
        int flag = Xiyou.ReadUnsignedByte(dis);
        m_manyMokuaiiiiiiiiiiiiiies = (flag & 0x01) != 0;
        m_largeZhennnnnns = (flag & 0x02) != 0;
        m_manyZhennnnnns = (flag & 0x04) != 0;

        int frameCount = Xiyou.ReadUnsignedVarshort(dis);
        m_frames = new short[frameCount][];

        m_colHezzzzzz = new short[frameCount * 4];
        m_attHezzzzzz = new short[frameCount * 4];
	
        for (int i = 0; i < frameCount; i++)
        {
            int embeddingMokuaiiiiiiiiiiiiiieCount = Xiyou.ReadUnsignedByte(dis);
            m_frames[i] = new short[embeddingMokuaiiiiiiiiiiiiiieCount * 4];
            for (int j = 0; j < embeddingMokuaiiiiiiiiiiiiiieCount; j++)
            {
                m_frames[i][j*4] = (short)Xiyou.ReadUnsignedByte(dis);
	
                m_frames[i][j*4+1] = (short)Xiyou.ReadUnsignedByte(dis);
                if (m_largeZhennnnnns)
                {
                    m_frames[i][j*4+2] = Xiyou.ReadVarshort(dis);
                    m_frames[i][j*4+3] = Xiyou.ReadVarshort(dis);
                }
                else
                {
                    m_frames[i][j*4+2] = Xiyou.ReadByte(dis);
                    m_frames[i][j*4+3] = Xiyou.ReadByte(dis);
                }
            }
          
            if (m_largeZhennnnnns)
            {
               
       	        m_colHezzzzzz[i * 4 + 0] = Xiyou.ReadVarshort(dis); 
                m_colHezzzzzz[i * 4 + 1] = Xiyou.ReadVarshort(dis); 
                m_colHezzzzzz[i * 4 + 2] = Xiyou.ReadVarshort(dis); 
                m_colHezzzzzz[i * 4 + 3] = Xiyou.ReadVarshort(dis); 
                
           
                m_attHezzzzzz[i * 4 + 0] = Xiyou.ReadVarshort(dis); 
                m_attHezzzzzz[i * 4 + 1] = Xiyou.ReadVarshort(dis); 
                m_attHezzzzzz[i * 4 + 2] = Xiyou.ReadVarshort(dis); 
                m_attHezzzzzz[i * 4 + 3] = Xiyou.ReadVarshort(dis); 
            }
            else
            {
          
       	        m_colHezzzzzz[i * 4 + 0] = Xiyou.ReadByte(dis); 
                m_colHezzzzzz[i * 4 + 1] = Xiyou.ReadByte(dis); 
                m_colHezzzzzz[i * 4 + 2] = Xiyou.ReadByte(dis); 
                m_colHezzzzzz[i * 4 + 3] = Xiyou.ReadByte(dis); 
                
              
                m_attHezzzzzz[i * 4 + 0] = Xiyou.ReadByte(dis); 
                m_attHezzzzzz[i * 4 + 1] = Xiyou.ReadByte(dis); 
                m_attHezzzzzz[i * 4 + 2] = Xiyou.ReadByte(dis); 
                m_attHezzzzzz[i * 4 + 3] = Xiyou.ReadByte(dis); 
            }
        }

        int actionCount = Xiyou.ReadUnsignedVarshort(dis);
        m_actions = new short[actionCount][];
        m_mechModel = new short[actionCount * 4];
        for (int i = 0; i < actionCount; i++)
        {
            int embeddingZhennnnnnCount = Xiyou.ReadUnsignedByte(dis);
            m_actions[i] = new short[embeddingZhennnnnnCount];
            for (int j = 0; j < embeddingZhennnnnnCount; j++)
            {
                m_actions[i][j] = (short)Xiyou.ReadUnsignedShort(dis);
            }
            
            for ( int  j = 0; j < 4; j++ )
            {
                m_mechModel[i * 4 + j] = (short)Xiyou.ReadUnsignedShort(dis);
            }
        }


		
    }

   
    private void LoadGfx()
    {
        try
        {
            DataInputStream dis = new DataInputStream(FILE_NAME_GFXDATA.getClass().getResourceAsStream(FILE_NAME_GFXDATA));
            int textureCount = Xiyou.ReadUnsignedVarshort(dis);
            int[] texturepanYis = new int[textureCount+1];
            for (int i = 0; i < textureCount+1; i++)
            {
                texturepanYis[i] = Xiyou.ReadUnsignedShort(dis);
            }
            dis.skip(texturepanYis[m_ID]);

            m_imageFormat = Xiyou.ReadUnsignedByte(dis);
            dis.skip(1);
            m_imageID = Xiyou.ReadUnsignedByte(dis);
            if (m_imageFormat == IMAGE_FORMAT_PNG)
            {
                int flag = Xiyou.ReadUnsignedByte(dis);
                m_largeMokuaiiiiiiiiiiiiiies = (flag & 0x01) != 0;
            }
            int moduleCount = Xiyou.ReadUnsignedVarshort(dis);
            if (m_imageFormat == IMAGE_FORMAT_PNG)
            	{
            		m_MOkkkai = new byte[moduleCount * 4];
            	}
                
            else
                m_MOkkkai = new byte[moduleCount * 2];

	        if (IsHuanchongedAnimation(m_ID))
            {
                
            }
   
            for (int i = 0; i < moduleCount; i++)
            {
                if (m_imageFormat == IMAGE_FORMAT_PNG)
                {
                    m_MOkkkai[i*4] = (byte)Xiyou.ReadUnsignedByte(dis);
                    m_MOkkkai[i*4+1] = (byte)Xiyou.ReadUnsignedByte(dis);
                    m_MOkkkai[i*4+2] = (byte)Xiyou.ReadUnsignedByte(dis);
                    m_MOkkkai[i*4+3] = (byte)Xiyou.ReadUnsignedByte(dis);
                }
                else
                {
                    m_MOkkkai[i*2] = (byte)Xiyou.ReadUnsignedByte(dis);
                    m_MOkkkai[i*2+1] = (byte)Xiyou.ReadUnsignedByte(dis);
                }
            }


 
           
            dis.skip(texturepanYis[textureCount] - texturepanYis[m_ID+1]);

            int imageCount = Xiyou.ReadUnsignedVarshort(dis);
            int[] imagepanYis = new int[imageCount+1];
            for (int i = 0; i < imageCount+1; i++)
            {
                imagepanYis[i] = Xiyou.ReadUnsignedShort(dis);
            }
            dis.skip(imagepanYis[m_imageID]);

            if (m_imageFormat == IMAGE_FORMAT_PNG)
            {
                s_pngImages[m_imageID] = Image.createImage(dis.readUTF());
                s_pngImagesRefs[m_imageID]++;
                m_pngImageWidth = s_pngImages[m_imageID].getWidth();
                m_pngImageHeight = s_pngImages[m_imageID].getHeight();

            }

            dis.close();
            dis = null;
        }
        catch (Exception e)
        {
            Debug.PrintException(e);
        }
    }


  
    private void Free()
    {
        if (m_imageFormat == IMAGE_FORMAT_PNG)
        {
            s_pngImagesRefs[m_imageID]--;
            Debug.Assert(s_pngImagesRefs[m_imageID] >= 0,
                         "the references shumu of image " + m_imageID + " is less than 0");
        }
        m_MOkkkai = null;
        m_frames = null;
        m_actions = null;
    }

    private static void FreeUnusedPngImages()
    {
        for (int i = 0; i < DWorld.IMAGE_COUNT; i++)
        {
            if (s_pngImagesRefs[i] == 0)
            {
                s_pngImages[i] = null;
            }
        }
    }


  




    public void Draw(Graphics g, int x, int y, boolean flipX, boolean flipY, int frameID, int scenePalID, boolean insideViewport)
    {
	
        short[] frame = m_frames[frameID];

        int modID, flag;
        boolean actualFlipX, actualFlipY;
        int actualX, actualY;
        int modX = 0, modY = 0, modW = 0, modH = 0;
        int len = frame.length;


		
        for (int i = 0; i < len; i += 4)
        {
            modID = frame[i] & ZHEN_MASK;
            flag = frame[i+1] & ZHEN_MASK;

            actualX = x;
            actualY = y;

            if (m_imageFormat == IMAGE_FORMAT_PNG)
            {
                modX = m_MOkkkai[(modID<<2)] & MODULE_MASK;
                modY = m_MOkkkai[(modID<<2)+1] & MODULE_MASK;
                modW = m_MOkkkai[(modID<<2)+2] & MODULE_MASK;
                modH = m_MOkkkai[(modID<<2)+3] & MODULE_MASK;

                Debug.Assert(modX >= 0 && modX + modW <= m_pngImageWidth,
                            "module " + modID + " of animation " + m_ID + " is outside image");
                Debug.Assert(modY >= 0 && modY + modH <= m_pngImageHeight,
                            "module " + modID + " of animation " + m_ID + " is outside image");
            }

				if (flipX)
					actualX -= frame[i+2] - 1;    
				else
					actualX += frame[i+2];
				if (flipY)
					actualY -= frame[i+3] - 1;
				else
					actualY += frame[i+3];

            actualFlipX = flipX ^ ((flag & 0x01) != 0);
            actualFlipY = flipY ^ ((flag & 0x02) != 0);

            if (actualFlipX)
                actualX -= modW;
            if (actualFlipY)
                actualY -= modH;

            if (actualX + modW < PINGMUDDD.sssCHUANNN_LEFT || actualX >= PINGMUDDD.sssCHUANNN_LEFT + PINGMUDDD.sssCHUANNN_WIDTH)
                continue;
            if (actualY + modH < PINGMUDDD.sssCHUANNN_TOP || actualY >= PINGMUDDD.sssCHUANNN_TOP + PINGMUDDD.sssCHUANNN_HEIGHT)
                continue;

            if (m_imageFormat == IMAGE_FORMAT_PNG)
            { 	
                if (insideViewport)
                    HuaQuYuZaiShiTu(g, s_pngImages[m_imageID], modX, modY, modW, modH, GetFlip(actualFlipX, actualFlipY), actualX, actualY);
                else
                    HuaQuYuZaiPINMU(g, s_pngImages[m_imageID], modX, modY, modW, modH, GetFlip(actualFlipX, actualFlipY), actualX, actualY);
            }
       }
		
    }



    
    
    public static boolean IsHuanchongedAnimation(int animationID)
    {
        return false;
       
    }
    


    public int GetZhennnnnnDuration(int actionID, int embeddingZhennnnnnID)
    {
        Debug.Assert(actionID >= 0 && actionID < m_actions.length,
                    "actionID " + actionID + " overflows in Donghua.getZhennnnnnDuration");
        Debug.Assert(embeddingZhennnnnnID >= 0 && embeddingZhennnnnnID < m_actions[actionID].length,
                    "embeddingZhennnnnnID " + embeddingZhennnnnnID + " overflows in Donghua.getZhennnnnnDuration");

        return (m_actions[actionID][embeddingZhennnnnnID] & 0xFFFF) >> 8;
    }

  
    public int GetZhennnnnnID(int actionID, int embeddingZhennnnnnID)
    {
        Debug.Assert(actionID >= 0 && actionID < m_actions.length,
                    "actionID " + actionID + " overflows in Donghua.getZhennnnnnDuration");
        Debug.Assert(embeddingZhennnnnnID >= 0 && embeddingZhennnnnnID < m_actions[actionID].length,
                    "embeddingZhennnnnnID " + embeddingZhennnnnnID + " overflows in Donghua.getZhennnnnnDuration");

        return m_actions[actionID][embeddingZhennnnnnID] & 0x00FF;
    }

  
    public int GetZhennnnnnCount(int actionID)
    {
        Debug.Assert(actionID >= 0 && actionID < m_actions.length,
                    "actionID " + actionID + " overflows in Donghua.getZhennnnnnCount");

        return m_actions[actionID].length;
    }

}

⌨️ 快捷键说明

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