Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

ANCC HTML5,I can't get a variable after jumping

Enthusiast ,
Aug 31, 2018 Aug 31, 2018

I can't get a variable after jumping.

This is the Start menu.

After jumping to a section, play to the end will jump back.

But you can't get a variable after jumping back(ezjxz1).

var ezjxz1;
var ezjxz2;
var ezjxz3;
var ezjxz4;
console.log(ezjxz1)

if(ezjxz1==1){this.sbxz1.gotoAndStop(2);}

if(ezjxz1==1&ezjxz2==1&ezjxz3==1&ezjxz4==1)
{
this.gotoAndPlay("daoqian");
}

this.stop();

this.sbxz1.addEventListener("click", sbxz1cx.bind(this));
this.sbxz2.addEventListener("click", sbxz2cx.bind(this));
this.sbxz3.addEventListener("click", sbxz3cx.bind(this));
this.sbxz4.addEventListener("click", sbxz4cx.bind(this));

function sbxz1cx()
{

ezjxz1=1;
this.gotoAndPlay("bingxiang");
}

function sbxz2cx()
{   ezjxz2=1;

this.sbxz2.gotoAndStop(2);
this.gotoAndPlay("gongxiang");
}
function sbxz3cx()
{   ezjxz3=1;

this.sbxz3.gotoAndStop(2);
this.gotoAndPlay("saodi");
}
function sbxz4cx()
{   ezjxz4==1;

this.sbxz4.gotoAndStop(2);
this.gotoAndPlay("mensuo");
}

597
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Aug 31, 2018 Aug 31, 2018

Hi.

Instead of:

var ezjxz1;

var ezjxz2;

.

.

.

Write:

this.ezjxz1;

this.ezjxz2;

.

.

.

Because 'var ezjxz1' will make the variable only available to that frame where it is declared. When you use 'this' you are adding/changing a property/method of/to the current object you're in.

To sum up:

ezjxz1 = 1; (you're declaring a global value)

var ezjxz1 = 1; (you're declaring a value for that frame only)

this.ezjxz1 = 1;(you're adding/changing a property for that entire timeline. For that object)

I hope this helps.

Regards,

...
Translate
Community Expert ,
Aug 31, 2018 Aug 31, 2018

Hi.

Instead of:

var ezjxz1;

var ezjxz2;

.

.

.

Write:

this.ezjxz1;

this.ezjxz2;

.

.

.

Because 'var ezjxz1' will make the variable only available to that frame where it is declared. When you use 'this' you are adding/changing a property/method of/to the current object you're in.

To sum up:

ezjxz1 = 1; (you're declaring a global value)

var ezjxz1 = 1; (you're declaring a value for that frame only)

this.ezjxz1 = 1;(you're adding/changing a property for that entire timeline. For that object)

I hope this helps.

Regards,

JC

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Aug 31, 2018 Aug 31, 2018

This prompt appears after the "if" decision

Object doesn't support property or method 'gotoAndPlay'

function ezjpdcx()
{


if(this.ezjxz1==1&this.ezjxz2==1&this.ezjxz3==1&this.ezjxz4==1)
{

this.gotoAndPlay("daoqian");
}

}

ezjpdcx();

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 31, 2018 Aug 31, 2018

It's a matter of scope.

In your case, "this" is referring to the Window object. Try console.log(this) inside of your function body and you'll see.

The safest way in my opinion to solve this scope issue is to use the automatically declared "exportRoot" property if you're referring to the main timeline or to use a variable to store the scope like this:

var that = this;

function ezjpdcx()

{

    if (that.ezjxz1 == 1 & that.ezjxz2 == 1 & that.ezjxz3 == 1 & that.ezjxz4 == 1)

    {

          that.gotoAndPlay("daoqian");

    }

}

Regards,

JC

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Aug 31, 2018 Aug 31, 2018

Thank you for your answer.

The problem is solved, but there is a new problem.

"gotoAndPlay"Cannot play,

Write in other places, gotoAndPlay can be played,

but the code is written to stop after the jump, will not play

Is it a code problem or is it because I'm animating too much?

Now, I need to delete a lot of animations to test the code.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Aug 31, 2018 Aug 31, 2018
LATEST

JoãoCésar  wrote

var ezjxz1;

var ezjxz2;

.

Write:

this.ezjxz1;

this.ezjxz2;

No, don't write that. All that does is attempt to access a nonexistent property and returns undefined. There's no need to declare object properties. Just assign to them when you're ready to assign to them. But if you really, really want to "declare" a property before it's used, you could do something like this.ezjkx1 = 0; etc...

JoãoCésar  wrote

It's a matter of scope.

Context, technically. Context is the current value of "this". Scope is the current scope chain for resolving variables. Since JavaScript uses lexical scope, a function can be executing in global context but local scope at the same time. For example, your code above that accesses the local variable "that".

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines