0

制作一个可以在鼠标单击时循环浏览这三个图像的 Flash 页面。由于某种原因,对计数的本地更改不会反映在全局更改上。我尝试了 _global 但语法很奇怪并且给了我错误。我应该如何实现这个?

import flash.events.Event;

var images:Array = ["images/image.jpg", "images/image2.jpg", "images/image3.jpg"];
var count:int = 0;

forward.addEventListener(MouseEvent.CLICK, loadPhoto);


function loadPhoto(evt:Event){

    if(count>2){
        count = 0;
    }

    trace(count);
    imageFrame.source = images[count];

    count++;

}

问题的简化版本是获取跟踪以输出您单击的次数。

import flash.events.Event;

var count:int = 0;

forward.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(evt:Event)
{
    trace(count);
    count++; 
}
4

3 回答 3

3

我认为您的问题是范围问题。试试这个:

import flash.events.Event;

var images:Array = ["images/image.jpg", "images/image2.jpg", "images/image3.jpg"];
var count:int = 0;

forward.addEventListener(MouseEvent.CLICK, clickHandler);


function clickHandler(evt:Event)
{
    loadPhoto(); // Notice, this is calling a function already defined on root!
}

function loadPhoto()
{
    trace(count);
    // Use modulous to deal with this type of behavior -- it is easier in the end.
    imageFrame.source = images[count%images.length];

    count++; // Count should be within scope here.
}
于 2010-05-24T19:15:12.350 回答
1

这应该可以正常工作。我假设按照代码的编写方式,这是在时间线上而不是在课堂上。应该没什么区别——

但是尝试使用this引用函数内部的“count”变量

它可能看起来更像:

function loadPhoto(evt:Event){

    if(this.count>2){
        this.count = 0;
    }

    trace(this.count);
    imageFrame.source = images[this.count];

    this.count++;

}

它更加冗长和迂腐,但您的初始代码应该可以正常工作。我可能会添加 - 此代码不使用函数外部的“计数”变量,而不是声明它 - 问题是,当函数运行时计数器始终为“0”?

于 2010-05-24T18:40:02.030 回答
1

代码是否有可能在多次执行的框架中?(例如,因为您在某处错过了 stop() )

如果是这样,您可能会遇到一个您没有注意到的问题,这是导致这种奇怪行为的原因。检查是否发生这种情况的一种简单方法是trace("test")在声明之后count(或之前,但将其放在该框架脚本中)。

于 2010-05-24T19:47:58.217 回答