Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从类访问时间轴变量?_Actionscript 3_Flash_Actionscript_Flash Cs6 - Fatal编程技术网

Actionscript 3 从类访问时间轴变量?

Actionscript 3 从类访问时间轴变量?,actionscript-3,flash,actionscript,flash-cs6,Actionscript 3,Flash,Actionscript,Flash Cs6,在我程序的一个框架中,我有一个“玩家”的代码,它本质上是一门跟随角色的大炮,细节并不重要。所以我想把这门大炮做成一个类,然后我可以把它作为电影剪辑,放在舞台上,有类似的大炮,起着类似的作用。所以基本上我需要把它变成一个类,以某种方式与时间轴变量交互 现在,Player类看起来是这样的 package { import flash.display.*; import flash.events.*; import flash.ui.*; public class

在我程序的一个框架中,我有一个“玩家”的代码,它本质上是一门跟随角色的大炮,细节并不重要。所以我想把这门大炮做成一个类,然后我可以把它作为电影剪辑,放在舞台上,有类似的大炮,起着类似的作用。所以基本上我需要把它变成一个类,以某种方式与时间轴变量交互

现在,Player类看起来是这样的

package 
{
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;

    public class Player extends MovieClip
    {
    public function Player() {
}
}
}
警告代码转储你不必阅读所有这些,这是我需要制作成一个类的玩家代码,这样我就可以制作更多具有不同参数的玩家,而不是全部跟随角色等等。。。那我该怎么做呢?这段代码目前正在与舞台上的对象和时间线中的其他变量交互

// player settings
var _rotateSpeedMax:Number = 20;
var _gravity:Number = .10;
// projectile gun settings
var _bulletSpeed:Number = 4;
var _maxDistance:Number = 200;
var _reloadSpeed:Number = 250;//milliseconds
var _barrelLength:Number = 20;
var _bulletSpread:Number = 5;
// gun stuff
var _isLoaded:Boolean = true;
var _isFiring:Boolean = false;
var _endX:Number;
var _endY:Number;
var _startX:Number;
var _startY:Number;
var _reloadTimer:Timer;
var _bullets:Array = [];

// array that holds walls

var _solidObjects:Array = [];
// global vars
var _player:MovieClip;
var _dx:Number;
var _dy:Number;
var _pcos:Number;
var _psin:Number;
var _trueRotation:Number;
/**
 * Constructor
 */
_solidObjects = [world.wall01,world.wall02,world.wall03,world.wall04];
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
//character.addEventListener(Event.ENTER_FRAME, moveDude);


//////////////////////////////////////;
// Player & Weapon Methods
//////////////////////////////////////

/**
 * Creates player
 * Uses "Player" movieclip linked in library
 */
createPlayer();
function createPlayer():void
{

    // attach player movieclip from library

    // position player in center
    if (character!=null&&_player!=null)
    {

        _player.x = character.x +5;
        _player.y = character.y +5;
    }
    else if (_player ==null)
    {
        _player = new Player();

        // add to display list
        stage.addChild(_player);
    }
}

/**
 * Fire weapon
 */
function fire():void
{
    // check if firing
    if (! _isFiring)
    {
        return;
    }

    // check if reloaded
    if (! _isLoaded)
    {
        return;
    }

    // create bullet
    createBullet();

    // start reload timer
    _reloadTimer = new Timer(_reloadSpeed);
    _reloadTimer.addEventListener(TimerEvent.TIMER, reloadTimerHandler);
    _reloadTimer.start();

    // set reload flag to false;
    _isLoaded = false;
}

/**
 * Creates a bullet movieclip and sets it's properties
 */
function createBullet():void
{
    // precalculate the cos & sine
    _pcos = Math.cos(_player.rotation * Math.PI / 180);
    _psin = Math.sin(_player.rotation * Math.PI / 180);

    // start X & Y
    // calculate the tip of the barrel
    _startX = _player.x - _barrelLength * _pcos;
    _startY = _player.y - _barrelLength * _psin;

    // end X & Y
    // calculate where the bullet needs to go
    // aim 50 pixels in front of the gun
    _endX = _player.x - 50 * _pcos + Math.random() * _bulletSpread - _bulletSpread * .5;
    _endY = _player.y - 50 * _psin + Math.random() * _bulletSpread - _bulletSpread * .5;

    // attach bullet from library
    var tempBullet:MovieClip = new Bullet();

    // calculate velocity
    tempBullet.vx = (_endX - _startX) / _bulletSpeed;
    tempBullet.vy = (_endY - _startY) / _bulletSpeed;

    // set position
    tempBullet.x = _startX;
    tempBullet.y = _startY;

    // save starting location
    tempBullet.startX = _startX;
    tempBullet.startY = _startY;

    // set maximum allowed travel distance
    tempBullet.maxDistance = stage.stageHeight;//_maxDistance;

    // add bullet to bullets array
    _bullets.push(tempBullet);

    // add to display list;
    stage.addChild(tempBullet);
}

/**
 * Updates bullets
 */
function updateBullets():void
{
    var i:int;
    var tempBullet:MovieClip;

    // loop thru _bullets array
    for (i = 0; i < _bullets.length; i++)
    {
        // save a reference to current bullet
        tempBullet = _bullets[i];

        // check if gravity is enabled
        if (gravityCheckbox.selected)
        {
            // add gravity to Y velocity
            tempBullet.vy +=  _gravity;

        }

        // update bullet position
        tempBullet.x +=  tempBullet.vx;
        tempBullet.y +=  tempBullet.vy;

        // check if bullet went too far
        if (getDistance(tempBullet.startX - tempBullet.x, tempBullet.startY - tempBullet.y) > tempBullet.maxDistance + _barrelLength)
        {
            destroyBullet(tempBullet);
        }

        // check for collision with walls
        if (checkCollisions(tempBullet.x,tempBullet.y))
        {
            destroyBullet(tempBullet);
        }
    }
}

/**
 * Destroys bullet
 * @parambulletTakes bullet movieclip
 */
function destroyBullet(bullet:MovieClip):void
{
    var i:int;
    var tempBullet:MovieClip;

    // loop thru _bullets array
    for (i = 0; i < _bullets.length; i++)
    {
        // save a reference to current bullet
        tempBullet = _bullets[i];

        // if found bullet in array
        if (tempBullet == bullet)
        {
            // remove from array
            _bullets.splice(i, 1);

            // remove from display list;
            bullet.parent.removeChild(bullet);

            // stop loop;
            return;
        }
    }
}

/**
 * Reload weapon
 */
function reloadWeapon():void
{
    _isLoaded = true;
}

/**
 * Checks for collisions between points and objects in _solidObjects
 * @returnCollision boolean
 */
function checkCollisions(testX:Number, testY:Number):Boolean
{
    var i:int;
    var tempWall:MovieClip;

    // loop thru _solidObjects array
    for (i = 0; i < _solidObjects.length; i++)
    {
        // save a reference to current object
        tempWall = _solidObjects[i];

        // do a hit test
        if (tempWall.hitTestPoint(testX,testY,true))
        {
            return true;

            // stop loop
            break;
        }
    }
    return false;
}

/**
 * Calculate player rotation 
 */
function updateRotation():void
{
    // calculate rotation based on mouse X & Y
    _dx = _player.x - stage.mouseX;
    _dy = _player.y - stage.mouseY;

    // which way to rotate
    var rotateTo:Number = getDegrees(getRadians(_dx,_dy));

    // keep rotation positive, between 0 and 360 degrees
    if (rotateTo > _player.rotation + 180)
    {
        rotateTo -=  360;
    }
    if (rotateTo < _player.rotation - 180)
    {
        rotateTo +=  360;
    }

    // ease rotation
    _trueRotation = (rotateTo - _player.rotation) / _rotateSpeedMax;

    // update rotation
    _player.rotation +=  _trueRotation;
}

//////////////////////////////////////
// Event Handlers
//////////////////////////////////////

/**
 * Enter Frame handler
 * @parameventUses Event
 */
function enterFrameHandler(event:Event):void
{
    createPlayer();
    updateRotation();
    updateBullets();
    fire();
}

/**
 * Mouse Up handler
 * @parameUses MouseEvent
 */
function onMouseUpHandler(event:MouseEvent):void
{
    _isFiring = false;
}

/**
 * Mouse Down handler
 * @parameUses MouseEvent
 */
function onMouseDownHandler(event:MouseEvent):void
{
    _isFiring = true;
}

/**
 * Reload timer
 * @parameTakes TimerEvent
 */
function reloadTimerHandler(e:TimerEvent):void
{
    // stop timer
    e.target.stop();

    // clear timer var;
    _reloadTimer = null;

    reloadWeapon();
}

//////////////////////////////////////
// Utilities
//////////////////////////////////////

/**
 * Get distance
 * @paramdelta_x
 * @paramdelta_y
 * @return
 */
function getDistance(delta_x:Number, delta_y:Number):Number
{
    return Math.sqrt((delta_x*delta_x)+(delta_y*delta_y));
}

/**
 * Get radians
 * @paramdelta_x
 * @paramdelta_y
 * @return
 */
function getRadians(delta_x:Number, delta_y:Number):Number
{
    var r:Number = Math.atan2(delta_y,delta_x);

    if (delta_y < 0)
    {
        r +=  (2 * Math.PI);
    }
    return r;
}

/**
 * Get degrees
 * @paramradiansTakes radians
 * @returnReturns degrees
 */
function getDegrees(radians:Number):Number
{
    return Math.floor(radians/(Math.PI/180));
}
//播放器设置
var _rotateSpeedMax:Number=20;
重力变量:数值=0.10;
//射弹炮设置
var _BullettSpeed:数字=4;
var _maxDistance:数字=200;
var _重新加载速度:数字=250//毫秒
var _barrelLength:Number=20;
var _bulletSpread:数字=5;
//枪械
var_isLoaded:Boolean=true;
变量_isFiring:布尔值=false;
var_endX:数字;
var_endY:数字;
var_startX:编号;
变量开始:数字;
var _reloadTimer:定时器;
变量_项目符号:数组=[];
//容纳墙壁的阵列
var_solidObjects:Array=[];
//全局变量
玩家:MovieClip;
var_dx:数字;
变量:数字;
pcos变量:数量;
变量:数字;
变量_:数字;
/**
*建造师
*/
_solidObjects=[world.wall01,world.wall02,world.wall03,world.wall04];
stage.addEventListener(Event.ENTER\u FRAME,enterFrameHandler);
stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE\u UP,onMouseUpHandler);
//character.addEventListener(Event.ENTER_FRAME,moveDude);
//////////////////////////////////////;
//玩家与武器方法
//////////////////////////////////////
/**
*创造玩家
*使用库中链接的“播放器”movieclip
*/
createPlayer();
函数createPlayer():void
{
//从库中附加播放器movieclip
//把运动员放在中间位置
如果(字符!=null&&u玩家!=null)
{
_player.x=character.x+5;
_player.y=character.y+5;
}
else如果(_player==null)
{
_player=新玩家();
//添加到显示列表
stage.addChild(_player);
}
}
/**
*火力武器
*/
函数fire():void
{
//检查是否点火
如果(!\u正在点火)
{
返回;
}
//检查是否重新加载
如果(!\u已加载)
{
返回;
}
//创建项目符号
createBullet();
//启动重新加载计时器
_reloadTimer=新计时器(_reloadSpeed);
_reloadTimer.addEventListener(TimerEvent.TIMER,reloadTimerHandler);
_reloadTimer.start();
//将重新加载标志设置为false;
_isLoaded=false;
}
/**
*创建项目符号movieclip并设置其属性
*/
函数createBullet():void
{
//预先计算余弦和正弦
_pcos=Math.cos(_player.rotation*Math.PI/180);
_psin=Math.sin(_player.rotation*Math.PI/180);
//开始X&Y
//计算桶的顶部
_startX=_player.x-_barrelLength*_pcos;
_startY=_player.y-_barrelLength*_psin;
//结束X&Y
//计算子弹需要去哪里
//瞄准枪前50个像素
_endX=\u player.x-50*\u pcos+Math.random()*\u bulletSpread-\u bulletSpread*.5;
_endY=\u player.y-50*\u psin+Math.random()*\u bulletSpread-\u bulletSpread*.5;
//从库中附加项目符号
var tempbill:MovieClip=new Bullet();
//计算速度
tempbill.vx=(_endX-_startX)/_bulletSpeed;
tempbill.vy=(\u endY-\u startY)/\u bulletSpeed;
//设定位置
tempbill.x=_startX;
tempbill.y=_startY;
//保存起始位置
tempbill.startX=_startX;
tempbill.startY=\u startY;
//设置允许的最大行驶距离
tempBullet.maxDistance=stage.stageHeight;//\u maxDistance;
//将项目符号添加到项目符号数组
_子弹。推(子弹);
//添加到显示列表;
stage.addChild(tempbill);
}
/**
*更新项目符号
*/
函数updateBullets():void
{
变量i:int;
var tempBullet:MovieClip;
//环通子弹阵列
对于(i=0;i<\u.length;i++)
{
//保存对当前项目符号的引用
tempbill=_子弹[i];
//检查重力是否启用
如果(选中重力复选框)
{
//将重力添加到Y速度
tempbill.vy+=\u重力;
}
//更新子弹位置
tempbill.x+=tempbill.vx;
tempbill.y+=tempbill.vy;
//检查子弹是否飞得太远
if(getDistance(tempbill.startX-tempbill.x,tempbill.startY-tempbill.y)>tempbill.maxDistance+\u barrelLength)
{
销毁子弹(tempBullet);
}
//检查是否与墙壁发生碰撞
if(检查碰撞(tempbill.x,tempbill.y))
{
销毁子弹(tempBullet);
}
}
}
/**
*摧毁子弹
*@ParamBullettle电影
*/
功能销毁项目符号(项目符号:MovieClip):无效
{
变量i:int;
var tempBullet:MovieClip;
//环通子弹阵列
对于(i=0;i<\u.length;i++)
{
//保存对当前项目符号的引用
tempbill=_子弹[i];
//如果在阵列中找到子弹
如果(临时项目符号==项目符号)
{
//从阵列中删除
_项目符号.拼接(i,1);
//从显示列表中删除;
bullet.parent.removeChild(bullet);
//停止回路;
返回;
}
}
}
/**
*重新装填武器
*/
函数重载武器():void
{
_isLoaded=true;
}
/**
*检查_solidObjects中的点和对象之间的碰撞
*@return冲突布尔值
*/
函数checkCollisions(testX:Number,testY:Number):布尔值
{
VarI:i