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

📄 fsactionobject.java

📁 利用opensource的开源jar实现生成flash文件
💻 JAVA
字号:
/*
 * FSActionObject.java
 * Transform
 * 
 * Copyright (c) 2001-2006 Flagstone Software Ltd. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 *
 *  * Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright notice, 
 *    this list of conditions and the following disclaimer in the documentation 
 *    and/or other materials provided with the distribution.
 *  * Neither the name of Flagstone Software Ltd. nor the names of its contributors 
 *    may be used to endorse or promote products derived from this software 
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
 * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.flagstone.transform;

/** The FSActionObject is a base class for the classes that represent the different types 
 * of actions defined in the Flash file format specification. The function of the class 
 * is the same as the FSMovieObject class however the format of the encoded binary data 
 * is different.
 * 
 * This class is primarily used internally in the library however the getType() method is 
 * useful when manipulating decoded Flash files. Rather than use run-time type inspection 
 * provided by the programming environment the method can be used to identify the action that a 
 * given object represents. The getType() method is essential when examining FSAction objects
 * which represent a large number byte-codes which perform stack-based operations such as 
 * add, subtract, etc.
 */
public abstract class FSActionObject extends FSTransformObject
{
    /** Type identifying a GotoFrame action. */
    public static final int GotoFrame     = 129;
    /** Type identifying a GetUrl action. */
    public static final int GetUrl        = 131;
// Flash 3
    /// Type identifying a WaitForFrame action.
    public static final int WaitForFrame  = 138;
    /// Type identifying a SetTarget action.
    public static final int SetTarget     = 139;
    /// Type identifying a GotoLabel action.
    public static final int GotoLabel     = 140;
// Flash 4
    /// Type identifying a WaitForFrame2 action.
    public static final int WaitForFrame2 = 141;
    /// Type identifying a Push action.
    public static final int Push          = 150;
    /// Type identifying a Jump action.
    public static final int Jump          = 153;
    /// Type identifying a GetUrl2 action.
    public static final int GetUrl2       = 154;
    /// Type identifying an If action.
    public static final int If            = 157;
    /// Type identifying a Call action.
    public static final int Call          = 158;
    /// Type identifying a GotoFrame2 action.
    public static final int GotoFrame2    = 159;
// Flash 5
    /// Type identifying a RegisterCopy action.
    public static final int RegisterCopy  = 135;
    /// Type identifying a Table action.
    public static final int Table         = 136;
    /// Type identifying a With action.
    public static final int With          = 148;
    /// Type identifying a NewFunction action.
    public static final int NewFunction   = 155;
// Flash 7
    /// Type identifying a NewFunction2 action.
    public static final int NewFunction2     = 142;
    /// Type identifying a ExceptionHandler action.
    public static final int ExceptionHandler = 143;

    protected int type = 0;
    protected int length = 0;
    
    protected FSActionObject(int aType)
    {
        type = aType;
    }
    protected FSActionObject(FSActionObject obj)
    {
        type = obj.type;
        length = obj.length;
    }  
    /** Gets the code used that identifies the type of the action when it is encoded. 

        @return the code used to denote the type of action performed.
        */
    public int getType() 
    {
        return type;
    }

    int getLength() 
    {
        return length;
    }
    
    /**
     * Length is used to calculate the then of the action when it is encoded to 
     * the binary Flash file format. This method can be used to calculate the size 
     * of offsets and jumps for FSIf and FSJump actions.
     *
     * @return the length of the encoded action in bytes.
     */
    public int length()
    {
        int encodedLength = (type > 128) ? 3 : 1;
        
        encodedLength += length(new FSCoder(FSCoder.LITTLE_ENDIAN, new byte[0]));
        
        return encodedLength;
    }

    /** 
     * Returns true if anObject is equal to this one. Objects are considered 
     * equal if they would generate identical binary data when they are encoded 
     * to a Flash file.
     *
     * @return true if this object would be identical to anObject when encoded.
     */
    public boolean equals(Object anObject)
    {
        boolean result = false; 
        
        if (super.equals(anObject))
        {
            result = type == ((FSActionObject)anObject).type;
        }
        return result;
    }

    public int length(FSCoder coder)
    {
        length = 0;
        
        return length;
    }
    
    public void encode(FSCoder coder)
    {
        coder.beginObject(name());
        coder.writeWord(type, 1);

        if (type >= 128)
            coder.writeWord(length, 2);
    }
    
    public void decode(FSCoder coder)
    {
        coder.beginObject(name());
        
        type = coder.readWord(1, false);
        
        if (type >= 128)
            length = coder.readWord(2, false);
        else
            length = 0;
    }
}

⌨️ 快捷键说明

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