1

編集: Player.as と addchild を含めました

私は一日中これを行う方法を理解しようとしてきましたが、そうすることで多くのことを学びました. しかし、私は助けが必要なところまで来ました。

私はこれをしなければならないことを知っています: Back1 クラスに Collisions var を作成します。

Back1 と呼ばれる背景は、衝突イメージを含むムービークリップであるためです。

変数とクラスをうまく説明している 1 つまたは 2 つの優れたサイトを見つけましたが、この問題をどのように解決すればよいかまだわかりません

変数とクラスの後の調査:

http://www.republicofcode.com/tutorials/flash/as3variables/

http://www.photonstorm.com/archives/1136/flash-game-dev-tip-1-creating-a-cross-game-communications-structure

上記の問題により、次のエラーが発生しますが、Back1 クラスで Collisions var を作成していないことが原因であると考えられます

ArgumentError: エラー #1063: Bumper() の引数の数が一致しません。予想: 2、値 0。

  • flash.display::MovieClip/gotoAndStop() で DocumentClass/onRequestStart()DocumentClass.as:64] で flash.events::EventDispatcher/dispatchEventFunction() で flash.events::EventDispatcher/dispatchEvent() で MenuScreen/onClickStart( )MenuScreen.as:18]

    package 
     {
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.geom.Point;
    import Bumper;
    //import Back1;
    
    public class Test extends MovieClip
    {
    
        public var leftBumping:Boolean = false;
    public var rightBumping:Boolean = false;
    public var upBumping:Boolean = false;
    public var downBumping:Boolean = false;
    
    public var leftBumpPoint:Point = new Point(-30,-55);
    public var rightBumpPoint:Point = new Point(30,-55);
    public var upBumpPoint:Point = new Point(0,-120);
    public var downBumpPoint:Point = new Point(0,0);
    
    public var scrollX:Number = 0;
    public var scrollY:Number = 500;
    
    public var xSpeed:Number = 0;
    public var ySpeed:Number = 0;
    
    public var speedConstant:Number = 4;
    public var frictionConstant:Number = 0.9;
    public var gravityConstant:Number = 1.8;
    public var jumpConstant:Number = -35;
    public var maxSpeedConstant:Number = 18;
    
    public var doubleJumpReady:Boolean = false;
    public var upReleasedInAir:Boolean = false;
    
    public var keyCollected:Boolean = false;
    public var doorOpen:Boolean = false;
    
    public var currentLevel:int = 1;
    
    public var animationState:String = "idle";
    
    public var bulletList:Array = new Array();
    public var enemyList:Array = new Array();
    public var bumperList:Array = new Array();
     public var back1:Back1;
    public var collisions:Collisions;
    //public var back1:Collisions = new Collisions ;
     public var player:Player;
    
    public function Test()
    {
        addEventListener(Event.ADDED_TO_STAGE, init);
    }
    
    public function init(e:Event):void
    {
    
        player = new Player(320, 360);
        back1 = new Back1();
        collisions = new Collisions();
        //back1.collisions = new Collisons();
              addBumpersToLevel1();
    }
    public function addBumpersToLevel1():void
    {
        addBumper(500, -115);
        addBumper(740, -115);
    }
            public function addPlayerTolevel1():void 
    {
        addPlayer(320, 360);
    }
    public function loop(e:Event):void
    {
        trace("back1.collisions "+back1.collisions);
                    trace("back1 "+back1);
                    trace("collisions "+collisions);
        if (back1.collisions.hitTestPoint(player.x + leftBumpPoint.x,player.y + leftBumpPoint.y,true))
        {
    

Bumper.as を追加した場合に備えて

package  {
import flash.display.MovieClip;
import flash.events.Event;

public class Bumper extends MovieClip{
    public function Bumper(xLocation:int, yLocation:int) {
        // constructor code
        x = xLocation;
        y = yLocation;

        addEventListener(Event.ENTER_FRAME, bumper);
    }

    public function bumper(e:Event):void{
        //code here
    }
}

}

Player.as

 package  {
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Player extends MovieClip {

        public function Player(xLocation:int, yLocation:int) {
            // constructor code
            x = xLocation;
            y = yLocation;
           }



     //   public function removeSelf():void {
      //      trace("remove enemy");
       //     removeEventListener(Event.ENTER_FRAME, loop);
       //     this.parent.removeChild(this);
       // }



 }
 }

Back1.as ファイル (インスタンス化が間違っていることに注意してください)

package  {
import flash.display.MovieClip;


public class Back1 extends MovieClip {
    //public var collisions:Back1;
           //what should i put here?
}
}
4

2 に答える 2

1

私はあなたが何を意味するのか完全に理解しているのかわかりません。質問は奇妙な言い回しです。

背景オブジェクト(Backクラス)とプレーヤーオブジェクトの間の衝突を実現したいと思いますか?Testクラスにはそのような変数がないため、投稿したコードからプレーヤーオブジェクトが何であるかがわかりません。

2つのオブジェクト間の衝突チェックをテストするには、次のコードを使用します。

if(someObject.hitTestObject(anotherObject))

または、hitTestPointを使用する場合:

if(back1.hitTestPoint(player.x, player.y,true))

それから、あなたが投稿したコードから、back1クラスがどのように見えるかはわかりません。MovieClipまたはSpriteを拡張し、同じ(または任意のDisplayObject)を実行するPlayerクラスがある場合、これは機能するはずです。

これ: Bumper()での引数カウントの不一致。期待値:2、値0。

発生するエラーは、コードに示されていない別の場所から発生しているようです。Bumperクラスのコンストラクターにパラメーターを渡さなかったと思います。

ところで、これはFlash IDEのサンプルですか、それともFlashDevelopやFlashBuilderなどの他のプログラムですか?Flash IDEを使用していて、シーンに配置されたムービークリップインスタンスにコードをアタッチしようとしている場合、パラメータを渡すことはできないと思います。Flash IDEで作業してから、しばらく経ちました。

編集:

サンプルコードは次のとおりです。

//::  Change Back1 class to this

package  {
import flash.display.MovieClip;


public class Back1 extends MovieClip {
    public function Back1()
    {
        graphics.beginFill(0xFF0000);
        graphics.drawRect(0, 0, 50, 50);
        graphics.endFill();
    }
}
}


//::  Then in your Main class (Or the Test class) add the following

var player:Player = new Player(25, 25);
var collidable:Back1 = new Back1();

addChild(player);
addChild(collidable);

//::  Goes in your loop/update
if (collidable.hitTestPoint(player.x, player.y, true))
{
    trace("HIT PLAYER");
}

グラフィックをBack1クラスにどのように適用するかはあなた次第です。単純なボックスを描画しました。それは何でもかまいません。

于 2013-01-16T13:16:35.927 に答える
0

バンパー クラスのデフォルト パラメータを設定します。

package  {
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Bumper extends MovieClip{
        public function Bumper(xLocation:int = 0, yLocation:int = 0) {
            // constructor code
            x = xLocation;
            y = yLocation;

            addEventListener(Event.ENTER_FRAME, bumper);
        }

        public function bumper(e:Event):void{
            //code here
        }
    }

    }
于 2013-01-16T13:29:35.570 に答える