Как создать переменную Collisions в классе Back

Изменить: теперь я включил Player.as и addchild

Я весь день пытался понять, как это сделать, и снова многому научился при этом. Но я дошел до того, что мне нужна помощь.

Я знаю, что должен сделать следующее: создать переменную Collisions в классе Back1.

Поскольку фон Back1 - это фрагмент ролика, содержащий изображение Collisions.

Я нашел хороший сайт или два, которые хорошо объясняют переменные и классы, но я до сих пор не понимаю, как мне решить эту проблему.

Исследование переменных и классов:

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

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

указанная выше проблема приводит к следующей ошибке, но я считаю, что она вызвана не созданием переменной Collisions в классе Back1

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?
}
}

person Jacques    schedule 16.01.2013    source источник
comment
Ошибка говорит о том, что вы передали конструктору класса Bumper нулевые аргументы. Как вы его создаете?   -  person Serge Him    schedule 16.01.2013
comment
я добавил несколько общедоступных переменных, которые я вырезал, чтобы сделать его более прозрачным .... например .... общедоступный var bumperList: Array = new Array ();   -  person Jacques    schedule 16.01.2013
comment
Я думаю, что теперь у него отсутствует код для бампера   -  person Jacques    schedule 16.01.2013
comment
Похоже, у вас может быть фрагмент ролика Bumper на временной шкале, из-за чего общедоступная функция Bumper () запускается без xLocation и yLocation.   -  person David Mear    schedule 16.01.2013
comment
нет, это не на временной шкале, созданной с помощью addchild. Одна из проблем была только что решена Сержем, но она по-прежнему вызывает проблему для строки if (back1.collisions.hitTestPoint (player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)) возвращаемый erorr равен нуль   -  person Jacques    schedule 16.01.2013


Ответы (2)


Я не уверен, что полностью понимаю, что вы имеете в виду. Вопрос сформулирован странно.

Я предполагаю, что вы хотите добиться столкновения между вашим фоновым объектом (класс Back) и объектом игрока? Я не могу понять из кода, который вы опубликовали, что такое объект игрока, поскольку в вашем классе Test нет такой переменной.

Чтобы проверить проверку столкновения между двумя объектами, используйте следующий код:

if(someObject.hitTestObject(anotherObject))

Или в вашем случае при использовании hitTestPoint:

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

Опять же, я не знаю из опубликованного вами кода, как выглядит класс back1. Если он расширяет MovieClip или Sprite и у вас есть класс Player, который делает то же самое (ИЛИ любой DisplayObject), это должно сработать.

Это: Несоответствие количества аргументов в 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 - решать вам, я просто нарисовал простую рамку. Это могло быть что угодно.

person Placeable    schedule 16.01.2013
comment
Я хочу столкновение с изображением Collisions внутри мувиклипа Back1. Вы, наверное, правы насчет прикрепления кода к экземпляру фрагмента ролика, размещенному на сцене, я постараюсь добавить ребенка на плеер, спасибо - person Jacques; 16.01.2013
comment
Хорошо, я изменил его, чтобы создать игрока с addchild (см. отредактированный первый пост), благодаря Сержу, теперь он дает правильный код ошибки. - person Jacques; 16.01.2013
comment
Определен ли объект столкновений и создан ли его экземпляр в классе Back1? - person Placeable; 16.01.2013
comment
Извините за такую ​​глупость, но для ясности: вы имеете в виду отдельный файл Back1.as или / с .. как этот общедоступный var back1: Collisions = new Collisions; или столкновения: Back1 = new Back1 - person Jacques; 16.01.2013
comment
Хорошо, глядя на свой код, вы ссылаетесь на объект столкновений в своем объекте back1, поэтому я бы предположил, что он находится внутри класса Back1. Я просто хотел убедиться, что у вас есть его экземпляр в классе, чтобы вы могли ссылаться на него таким образом. Это могло быть причиной того, что он разбился. - person Placeable; 16.01.2013
comment
как мне создать его в файле класса Back1.as? это то, что у меня было в файле Back1.as: var collisions: Back1; - person Jacques; 16.01.2013
comment
может это коллизии: Back1 = new Back1 хм - person Jacques; 16.01.2013
comment
Я смущен, что у вас есть столкновения объектов типа Back1 внутри вашего собственного класса Back1? Разве это не типа Collisions, как у объекта collisions в вашем классе Test? Не могли бы вы показать мне, как выглядит файл .as для Back1? - person Placeable; 16.01.2013
comment
хорошо, это размещено ниже в верхнем посте, спасибо за вашу постоянную помощь - person Jacques; 16.01.2013
comment
Хорошо, Жак, глядя на ваш код класса Back1, для вас не имеет (для меня) никакого смысла применять объект внутри класса. И это не экземпляр. Это ПУСТО (NULL), если вы не дадите на него ссылку позже. Но это вызовет рекурсию. Это означает, что если вы создаете объект Back1 и сам создает объект Back1, этот объект также создаст объект Back1, и это будет продолжаться вечно. Я не уверен в причинах этого. Но я бы посоветовал вам избавиться от этого или пересмотреть свою структуру. - person Placeable; 16.01.2013
comment
Хорошо, спасибо, что указали мне на эту рекурсию. Если бы я только мог придумать способ создать столкновение между Player и Collisions с изображением Collisions внутри мувиклипа Back1. И чтобы он не был нулевым - person Jacques; 16.01.2013
comment
Честно говоря, я не думаю, что ты хочешь этого делать. Чтобы создать конфликт между вашим объектом-игроком и изображением, я могу написать для вас код. Мы должны продолжить это в чате. Или, во-вторых, проверьте мой первый пост, я отредактировал там решение. - person Placeable; 16.01.2013
comment
Ага, прости. Взгляните на мой первый пост. - person Placeable; 16.01.2013
comment
позвольте нам продолжить обсуждение в чате - person Jacques; 16.01.2013

Установите параметры по умолчанию для класса Bumper:

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
        }
    }

    }
person Serge Him    schedule 16.01.2013
comment
это помогло, но теперь дает правильную ошибку. TypeError: Ошибка # 1009: в основном это говорит о том, что следующая строка дает null ..... if (back1.collisions.hitTestPoint (player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)) ... .. (Также я добавил дополнительный файл Player и player.as благодаря совету другого пользователя) - person Jacques; 16.01.2013