PDA

Просмотр полной версии : Проблема переключения между кадрами.


Yulia_V
15.05.2013, 15:07
После перехода со второго кадра на третий выдаёт TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at MethodInfo-338()
И не хочет со 2-го на 1-й возвращаться, хотя между остальными перекликается.
С другими кадрами таких проблем нет.
Подскажите, в чем проблема?

public function main2() {
var var1:Boolean = false;
vpered_btn.addEventListener(MouseEvent.CLICK, go_next);
nazad_btn.addEventListener(MouseEvent.CLICK, go_prev);
vpered_btn.buttonMode = true;
nazad_btn.buttonMode = true;
function go_next (e:MouseEvent):void
{
nextFrame();
}
function go_prev (e:MouseEvent):void
{
prevFrame();
}
addEventListener(Event.ENTER_FRAME, hi2);
function hi2 (e:Event):void
{
// Здесь код только для 2-го кадра
if (currentFrame == 2)
{
var bounds:Object = {left:-275, right:825};
var currentX:Number = qwe.qw_mc.x;
var lastX:Number = qwe.qw_mc.x;
var vx:Number = 0;
var isDragging:Boolean = false;
var offset:Number;
qwe.qw_mc.buttonMode = true;
var timeline:TimelineLite;

addEventListener(Event.ENTER_FRAME, loop);
qwe.qw_mc.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
addEventListener(MouseEvent.MOUSE_UP, onUp);

function loop (e:Event):void
{
if (isDragging)
{
lastX = currentX;
currentX = mouseX;
vx = currentX - lastX;
}

}

function onDown (e:MouseEvent):void
{
isDragging = true;
offset = qwe.qw_mc.mouseX;
addEventListener(MouseEvent.MOUSE_MOVE, onMove);
}
function onMove(e:MouseEvent):void
{
qwe.qw_mc.x = qwe.mouseX - offset;
if (qwe.qw_mc.x <= bounds.left)
qwe.qw_mc.x = bounds.left;
else if (qwe.qw_mc.x >= bounds.right)
qwe.qw_mc.x = bounds.right;
e.updateAfterEvent();
}
function onUp(e:MouseEvent):void
{
isDragging = false;
removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
var position:Number = qwe.qw_mc.x
if(position <= 0){
qwe.textfield_txt.text = "Текст 3"
var myTween3:TweenLite = new TweenLite(qwe.qw_mc, 2, {x:-275});
}else if(position <= 550 && position >0){
qwe.textfield_txt.text = "Текст 2"
var myTween4:TweenLite = new TweenLite(qwe.qw_mc, 2, {x:275});
}else if(position <= 1100 && position >550){
qwe.textfield_txt.text = "Текст 1"
var myTween5:TweenLite = new TweenLite(qwe.qw_mc, 2, {x:825});

}
}
}
// Здесь код только для 3-го кадра
if (currentFrame == 3)
{
btn1.addEventListener(MouseEvent.CLICK, e1);
btn2.addEventListener(MouseEvent.CLICK, e2);
btn3.addEventListener(MouseEvent.CLICK, e3);
btn4.addEventListener(MouseEvent.CLICK, e4);
btn5.addEventListener(MouseEvent.CLICK, e5);
btn6.addEventListener(MouseEvent.CLICK, e6);
btn1.buttonMode = true;
btn2.buttonMode = true;
btn3.buttonMode = true;
btn4.buttonMode = true;
btn5.buttonMode = true;
btn6.buttonMode = true;


function e1 (e:MouseEvent):void
{
eskiz.gotoAndStop(1);
}
function e2 (e:MouseEvent):void
{
eskiz.gotoAndStop(2);
}
function e3 (e:MouseEvent):void
{
eskiz.gotoAndStop(3);
}
function e4 (e:MouseEvent):void
{
eskiz.gotoAndStop(4);
}
function e5 (e:MouseEvent):void
{
eskiz.gotoAndStop(5);
}
function e6 (e:MouseEvent):void
{
eskiz.gotoAndStop(6);
}
}


Вот исходники:

Srednas
15.05.2013, 15:24
Вы, на всякий случай, прикрепите к сообщению исходник, может быстрее ответ найдется.

Bletraut
15.05.2013, 18:38
Кадры зло. Очевидно что на код на первом кадре ссылается на объект на втором(или третьем) кадре которого еще нет. Попытайтесь переделать ваш проект так что что бы например те объект которые не нужны были скрыты (visible = false), либо разберитесь как правильно нужно использовать кадры.

Srednas
16.05.2013, 10:49
Наведите, пожалуйста, в коде порядок.
У вас все функции располагаются прямо в конструкторе, возможно это и допустимо, но я такого не видел, может опыта мало :)

Вам код нужно привести примерно к такому виду:

/* конструктор */
public function main2()
{
действия в конструкторе класса
}

/* это описание чего делает функция firstFunction */
function firstFunction ():void
{
действия, которые выполняет firstFunction
}

/* это описание чего делает функция secondFunction */
function secondFunction ():void
{
действия, которые выполняет secondFunction
}

/* это описание чего делает функция thirdFunction */
function thirdFunction ():void
{
действия, которые выполняет thirdFunction
}


У вас же выглядит код примерно так (разобраться что к чему сложновато):

public function main2() {
function firstFunction ():void
{
какие-то действия
function secondFunction ():void{
какие-то действия
function thirdFunction ():void{
какие-тодействия
}

}
}


Наведите порядок и тогда, возможно, ошибка уйдет, если нет — найти её будет полегче.