2009-08-26 2 views
0

У меня есть этот код:не удается получить доступ к ActionScript 3 метода Sprite.graphics.x

package graphics { 
    import flash.display.Sprite; 
    import flash.events.*; 

    public class Ball extends Sprite { 
     public function Ball(_stage){ 
      _stage.addChild(this); 
      drawBall(); 
     } 
     private function drawBall(){ 
      graphics.beginFill(0x0000CC); 
      graphics.lineStyle(2,0x000000,1); 
      graphics.drawCircle(0,0,10); 
      graphics.endFill(); 
     } 
    } 
} 

Добавлено:
и класс, который я прохожу к mxmlc
:

package { 
    import flash.display.Sprite; 
    import graphics.*; 

    [SWF(width='1024', height='768', backgroundColor='#FFFFFF', frameRate='30')] 

    public class Application extends Sprite { 
     public function Application(){ 
      var ball:Ball = new Ball(this); 
     } 
    } 
} 

исключением того, что при Я компилирую, я получаю следующую ошибку:

ball.as(11): col: 14 Error: Call to a possibly undefined method beginFill. 

      graphics.beginFill(0x0000CC); 
        ^

Наряду с другими тремя вызовами graphics.x().

Я, вероятно, здесь что-то не так, но я не знаю, что. Вы?

+0

увидеть мой udpated ответа - проблема графика имени пакета является таким же, как графики имени класса. –

ответ

1

Я боюсь, что проблема должна быть в другом месте вашего кода. Если я возьму свой класс и очистить его так, он компилирует следующим образом:

package 
{ 
import flash.display.Sprite; 

public class Ball extends Sprite 
{ 
    public function Ball() 
    { 
     drawBall(); 
    } 

    private function drawBall():void 
    { 
     graphics.beginFill(0x0000CC); 
     graphics.lineStyle(2,0x000000,1); 
     graphics.drawCircle(0,0,10); 
     graphics.endFill(); 
    } 
} 
} 

 
    $ mxmlc Ball.as 
    Loading configuration file [...]/flex-config.xml 
    /private/tmp/actionscript/Ball.swf (666 bytes) 

Он рисует синий шар в верхнем левом углу экрана. Поэтому ваша проблема с graphics должна быть связана с кодом, который вы здесь не указали.


Edit: на основе новой информации:

Ваше пространство имен graphics для класса Ball конфликтов с графикой имя свойства. Вам необходимо переименовать пакет и каталог, в котором он живет.

+0

Извините, я не думал, что это будет проблемой. Я обновил свой вопрос с остальной частью кода. –

+0

О, глупо меня. Вы бы не поверили, сколько раз я называю то, что уже принято ... Спасибо за помощь! –

0

Ваш класс не может добавить себя на сцену. Он не ссылается на сцену, пока не будет добавлен в список отображения. Ваш класс приложения должен создать мяч и добавить его на сцену. Кроме того, это просто этап, а не _stage.

+0

Хорошо - в своем классе Application он передает ссылку на сцену (var ball: Ball = new Ball (this);) в конструктор Ball. Не очень или рекомендуется, но это действительно код, который делает то, что вы ожидаете. –

+0

Ах да, я пытался ответить на этот вопрос на своем iPhone и не мог прочитать код до конца. Ты прав. При этом сцена может не существовать в этот момент (я не уверен, когда на этапе начальной загрузки Flex становится доступным). –

2

Просто используйте this.graphics.method, чтобы избежать путаницы, созданной вашим именем пакета.

Edit - after comment.

Через некоторое Мессинг вокруг, кажется, что хотя this.graphics следы как правильное изображение объекта, как и ожидалось, this.graphics.method ищется в классе мячем. Не знаю, что это такое, но это можно решить с помощью простого кастинга.

package graphics { 
    import flash.display.Graphics; 
     import flash.display.Sprite; 
     import flash.events.*; 

     public class Ball extends Sprite { 
       public function Ball(_stage) { 
         _stage.addChild(this); 
         drawBall(); 
       } 
       private function drawBall() { 
       var g:Graphics = this.graphics as Graphics; 
         g.beginFill(0x0000CC); 
         g.lineStyle(2,0x000000,1); 
         g.drawCircle(0,0,10); 
         g.endFill(); 
       } 
     } 
} 

Успехов

+0

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

+0

Ошибка компиляции с теми же ошибками. –

+0

Да, извините. Это действительно смущает компилятор. Проверьте мой другой ответ на что-то, что работает без необходимости изменения пакетов. – Virusescu

Смежные вопросы