Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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.0)_Actionscript 3_Collision Detection_Collision - Fatal编程技术网

Actionscript 3 有人能帮我检测平台的碰撞吗?(Actionscript 3.0)

Actionscript 3 有人能帮我检测平台的碰撞吗?(Actionscript 3.0),actionscript-3,collision-detection,collision,Actionscript 3,Collision Detection,Collision,我目前正在制作一个flash platformer引擎…但是我的碰撞检测需要一些重要的帮助。每当我的角色“跳跃”并落在碰撞对象上时,他都会在一瞬间穿过碰撞对象的一半,然后回到顶部(我希望他在那里)。如果我继续跳几次,他出现的阴影,如果你愿意的话,会在一瞬间越来越深入到碰撞物体中,最终使他一路坠落。这是我主要课程的代码,如果你需要我澄清什么,请询问 package { import flash.display.MovieClip; import flash.events.Event; impo

我目前正在制作一个flash platformer引擎…但是我的碰撞检测需要一些重要的帮助。每当我的角色“跳跃”并落在碰撞对象上时,他都会在一瞬间穿过碰撞对象的一半,然后回到顶部(我希望他在那里)。如果我继续跳几次,他出现的阴影,如果你愿意的话,会在一瞬间越来越深入到碰撞物体中,最终使他一路坠落。这是我主要课程的代码,如果你需要我澄清什么,请询问

package {


import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Stage;
import Player;
import HitObject;

public class TestGame extends MovieClip {

    private var _hitObject:HitObject; 
    private var _player:Player;
    private var _leftArrow:Boolean;
    private var _rightArrow:Boolean;
    private var _upArrow:Boolean;
    private var _hit:Boolean;
    private var _fall:Boolean;
    private var _jump:Boolean = true;
    private var _velR:Number = 0;
    private var _velL:Number = 0;
    private var _scale:Number = .1;
    private var _jumpCount:Number = 0;
    private var _i:Number = .5;
    private var _i2:Number = 7;
    private var _i3:Number = 0;
    private var _adjustHit:Number;
    private var _jumpRL:Number;
    private var _jumpVel:Number;

    public function TestGame() {
        _hitObject = new HitObject();
        _player = new Player();
        addChild(_hitObject);
        addChild(_player);
        _hitObject.x = (stage.width * 0.5) + 50;
        _hitObject.y = (stage.height * 0.5) + 150;
        _hitObject.scaleY = 3;
        _hitObject.alpha = .5;
        _player.scaleX = _scale;
        _player.scaleY = _scale;
        _player.x += 200;
        _player.y += 250;
        stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
    }

    private function enterFrameHandler(e:Event) {
        if(_player.hitTestObject(_hitObject)) {
            _adjustHit = _hitObject.y - _hitObject.height/2 - _player.height/2;
            _player.y = _adjustHit;
            _hit = true;
            _jump = false;
            if(_i3 > 8) {
            _jump = true;
            }
            _jumpCount = 0;
            _i2 = 7;
            _fall = false;
            _i3++;
        }

        else if(!_player.hitTestObject(_hitObject) && !_upArrow) {
            _fall = true;
        }


        if(_fall) {
            _player.y += _i;
            _i += .5;
            if(_i < 3) {
                _i = 3;
            }
            _hit = false;
        }
        if(_upArrow && _hit && _jump) {
            if(_velR > 0) {
                _jumpRL = _velR;
                _jumpVel = _velR;
            }
            else if(_velL > 0) {
                _jumpRL = -_velL;
                _jumpVel = _velL;
            }
            else {
                _jumpVel = 1;
                if(_player.scaleX == .1) {
                    _jumpRL = 1;
                }
                else {
                    _jumpRL = -1;
                }
            }

            _player.y -= _i2 + _jumpVel/2;
            _player.x += _jumpRL/2;
            _jumpCount += _i2;
            _i2 -= .5;
            _fall = false;
            if(_i2 < -3) {
              _jumpCount = 61;
            }
            if(_jumpCount > 60) {
                _i2 = 7;
                _jump = false;
                _fall = true;
                _jumpCount = 0;
            }
            _i3 = 0;
        }
        if(_rightArrow) {
            _player.startRun();
            _player.scaleX = _scale;
            _velL = 0;
            _player.x += _velR;
            if(_velR < 20) {
                _velR += 2;
            }
            if(_velR > 20) {
                _velR = 20;
            }  
        }

        else if(_leftArrow) {
            _player.startRun();
            _player.scaleX = -_scale;
            _velR = 0;
            _player.x -= _velL;
            if(_velL < 20) {
                _velL += 2;
            }
            if(_velL > 20) {
                _velL = 20;
            }  
        }

        if(_velR > 0) {
        _player.x += _velR;
        _velR -= .7;
        }
        else if(_velL > 0) {
        _player.x -= _velL;
        _velL -= .7;
        }
        if(_velR < 0 || _velL < 0) {
            _velR = 0;
            _velL = 0;
        }
    }

    private function keyDownHandler(e:KeyboardEvent):void {
        if(e.keyCode == 39) {
        _rightArrow = true;
        }
        if(e.keyCode == 37) {
        _leftArrow = true;
        }
        if(e.keyCode == 38) {
        _upArrow = true;
        }
    }
    private function keyUpHandler(e:KeyboardEvent):void {
        _upArrow = false;
        _rightArrow = false;
        _leftArrow = false;
    }
}
包{
导入flash.display.MovieClip;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
导入flash.display.Stage;
进口球员;
导入对象;
公共类TestGame扩展了MovieClip{
私有变量hitObject:hitObject;
私有变量玩家:玩家;
私有变量左箭头:布尔值;
私有变量_rightArrow:布尔值;
私有变量向上箭头:布尔值;
私有变量hit:Boolean;
私有变量:布尔值;
private var_jump:Boolean=true;
私有变量水平:数字=0;
私有变量水平:数字=0;
私有var_标度:数字=0.1;
私有变量_jumpCount:Number=0;
私有变量i:Number=.5;
私有变量i2:Number=7;
私有变量i3:Number=0;
私有变量_adjustHit:Number;
专用变量:编号;
私有变量_jumpVel:编号;
公共函数TestGame(){
_hitObject=新的hitObject();
_player=新玩家();
addChild(_hitObject);
addChild(_player);
_hitObject.x=(stage.width*0.5)+50;
_hitObject.y=(stage.height*0.5)+150;
_hitObject.scaleY=3;
_hitObject.alpha=.5;
_player.scaleX=_scale;
_player.scaleY=\u scale;
_player.x+=200;
_player.y+=250;
stage.addEventListener(Event.ENTER\u FRAME,enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keydowHandler);
stage.addEventListener(KeyboardEvent.KEY\u UP,keyUpHandler);
}
私有函数enterFrameHandler(e:事件){
if(_player.hitTestObject(_hitTestObject)){
_调整命中=_hitObject.y-_hitObject.height/2-_player.height/2;
_player.y=_=hit;
_命中=真;
_跳跃=假;
如果(_i3>8){
_跳跃=真;
}
_跳数=0;
_i2=7;
_fall=false;
_i3++;
}
如果(!\u player.hitTestObject(\u hitTestObject)和(&!\u upArrow),则为else{
_秋天=真;
}
如果(_fall){
_player.y+=\u i;
_i+=0.5;
如果(_i<3){
_i=3;
}
_命中=错误;
}
如果(_向上箭头&&u击中&&u跳跃){
如果(_水平>0){
_jumpRL=_-velR;
_jumpVel=_velR;
}
否则,如果(_级别>0){
_jumpRL=-\u水平;
_jumpVel=_velL;
}
否则{
_jumpVel=1;
如果(_player.scaleX==.1){
_jumpRL=1;
}
否则{
_jumpRL=-1;
}
}
_player.y-=\u i2+\u jumpVel/2;
_player.x+=\u jumpRL/2;
_跳线计数+=\u i2;
_i2-=.5;
_fall=false;
如果(_i2<-3){
_跳跃计数=61;
}
如果(_jumpCount>60){
_i2=7;
_跳跃=假;
_秋天=真;
_跳数=0;
}
_i3=0;
}
如果(_向右箭头){
_player.startRun();
_player.scaleX=_scale;
_velL=0;
_player.x+=\u级别;
如果(_水平<20){
_velR+=2;
}
如果(水平>20){
_velR=20;
}  
}
else if(_leftArrow){
_player.startRun();
_player.scaleX=-\u刻度;
_velR=0;
_player.x-=\u水平;
如果(水平<20){
_velL+=2;
}
如果(水平>20){
_velL=20;
}  
}
如果(_水平>0){
_player.x+=\u级别;
_velR-=.7;
}
否则,如果(_级别>0){
_player.x-=\u水平;
_水平-=.7;
}
如果(_水平<0 | | | u水平<0){
_velR=0;
_velL=0;
}
}
私有函数keyDownHandler(e:KeyboardEvent):void{
如果(e.keyCode==39){
_右箭头=真;
}
如果(e.keyCode==37){
_leftArrow=true;
}
如果(e.keyCode==38){
_向上箭头=真;
}
}
私有函数keyUpHandler(e:KeyboardEvent):void{
_向上箭头=假;
_右箭头=假;
_leftArrow=false;
}
}

}

如果您只是想要易于使用的碰撞检测,请查看for Actionscript 3。我以前使用过它,它胜过我使用过的所有其他碰撞检测框架

如果您只是想要易于使用的碰撞检测,请查看for Actionscript 3。我以前使用过它,它胜过我使用过的所有其他碰撞检测框架

根据您所说的,在时间't'时,玩家似乎还没有击中物体,但在时间't+1'时,玩家移动了10px(例如),因此现在似乎卡在物体中,直到您的碰撞处理程序将玩家移动到正确的位置

此外,由于上下跳跃,可能在碰撞后,球员在其位置增加之前没有正确地向后移动,这就是为什么随着时间的推移,如果你继续跳跃,球员最终会摔倒的原因

比较数字时要小心。我看到一个假设