Как ссылаться на var из кадра на шкале времени в классе объекта - PullRequest
0 голосов
/ 17 января 2011

Я использую Flash Professional CS5 / AS3

Я постараюсь описать это как можно лучше. Я новичок в ActionScript.

Итак, в моей временной шкале у меня есть переменная на кадре, которая представляет "жизни", и у меня есть некоторый код на временной шкале, который уменьшает количество жизней в зависимости от определенных событий, и все это прекрасно работает.

Итак, теперь я хотел создать класс конструктора, который я мог бы использовать повторно для множества объектов фрагмента ролика, и я хочу, чтобы эти объекты могли перемещаться только в том случае, если переменная между жизнями больше определенного числа. Итак, теперь, создавая мой конструктор класса для этих объектов, я просто хотел поместить оператор if, который ищет, чтобы число жизней превышало определенное число, что, если это так, должно заставить эти объекты делать то, что я хочу ... Но, когда я запускаю проект, я получаю «1120: доступ к неопределенному количеству свойств». Жизни - это переменная, которую я создал, как я уже сказал, и она прекрасно работает, когда на меня ссылаются все остальные, кроме случаев, когда я создаю новый файл .as для этих объектов, а затем пытаюсь ссылаться на него. Я получаю ту же ошибку, когда пытаюсь установить «жизни» в основном классе проекта. Я не уверен, где я должен поместить этот var или как я могу сделать это, чтобы я мог ссылаться на него из класса объекта.

Я не совсем уверен, как сформулировать или описать мою проблему, из-за которой трудно было найти учебник. Любые предложения, я уверен, что это должно быть простой задачей.

Ответы [ 3 ]

1 голос
/ 17 января 2011

Вы можете превратить «жизни» в статическую переменную в вашем файле класса. Вы должны знать, что есть некоторые противоречия относительно того, являются ли статические переменные хорошими, но если ваш проект не слишком большой и он работает для вас, вы можете использовать его. Это конечно легко.

Если вы объявите что-то как статическое в классе, оно станет глобальным (= доступным для всего вашего кода).

По сути, вы записываете это в файл своего класса (.as):

public static var lives:uint = 99;

Теперь в вашем коде временной шкалы вы должны заменить используемый вами var на этот. Вы можете получить доступ к статическим переменным, введя имя класса, за которым следует точка и имя статической переменной. Пример: ваш класс называется «MyClass». Затем вы получаете доступ к переменной, набрав MyClass.lives

Вы должны импортировать файл класса, но я предполагаю, что вы знаете, как это работает, и с автозаполнением CS5 (ctrl + пробел), я думаю, он сделает это за вас. Это будет примерно так:

import myclassdirectory.MyClass;
0 голосов
/ 19 января 2011

Другие ответы, безусловно, хорошие решения и были очень полезны, первый может быть лучше.Но то, что я решил использовать для моей ситуации, было просто создать функцию в главном фрейме, которая содержала код, чтобы уменьшить срок службы.Затем я просто запустил функцию из другого фрейма, выполнив это

//created a var in my movieclip that "contained" the main timeline
var main:MovieClip = MovieClip(this.parent.parent);

//then simply ran the function from the movieclip
main.decreaseLife();
0 голосов
/ 17 января 2011

Рекомендуется использовать временную шкалу для графических ресурсов и внешние классы для кода, это даст вам гораздо большую гибкость и проблемы, такие как та, которую вы упомянули, не должны оказаться слишком сложными для решения.

Рассмотрим некоторые параметры в вашем классе документов.

 public class MyDocumentClass
 {
      //An Object to store various parameters,
      //you could also use separate vars depending on
      //your MCs requirements
      private var params:Object ;

      public function MyDocumentClass
      {
          params = {};
          params.lives = 99;

          //Create a new MovieClip instance
          var myObject:MyObject = new MyObject( params );

          //fron now on you can access the lives property in your object
          addChild( myObject );

      }
  }
...