【问题标题】:AS3: graphics API not working as expectedAS3:图形 API 未按预期工作
【发布时间】:2015-03-26 05:35:51
【问题描述】:

我一直在做一个 AS3 项目,但由于我通常使用 php/javascript,这种语言对我来说是新的,我遇到了一个我不知道如何解决的问题。我想我会在这里问它,因为它可能超级简单,我只是错过了一些(真的)基本的东西。

这是我在外部 AS3 文件中的代码:

package  {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Shape;
    import flash.display.Graphics;

    public class lightstage_debug extends MovieClip {
        //create drag functions for tools
        public function dragMirror1(event:MouseEvent):void
        {
            if (stage.contains(mirror1))
            {
                mirror1.startDrag();
            }
        }
        public function releaseMirror1(event:MouseEvent):void
        {
            if (stage.contains(mirror1))
            {
                mirror1.stopDrag();
            }

        }
        /*********************************************************************************************
        TODO: make mirror2, mirror3 etc drag function exist in code even when those mirrors don't exist
        **********************************************************************************************/
        public function reCheck(event:Event):void
        {
            //BEGIN LEVEL 1 RECHECK//
            if (level.number == 1)
            {
                //check if mirror1 is touching line1
                if (mirror1.hitTestObject(line1))
                {
                    //redraw line 1 to stop at mirror1
                    /*************************************************************************************
                    TODO: MAKE LINE1 END **EXACTLY** WHERE MIRROR1 TOUCHES IT
                    **************************************************************************************/
                    line1.graphics.clear();
                    line1.graphics.lineStyle(2,0x000000,1);
                    line1.graphics.moveTo(0,200);
                    line1.graphics.lineTo((mirror1.x + (mirror1.width/2)),200);

                    //redraw line 2 to start at mirror1
                    line2.graphics.clear();
                    line2.graphics.lineStyle(2,0x000000,1);
                    line2.graphics.moveTo((mirror1.x + (mirror1.width/2)),200);
                    line2.graphics.lineTo(0,200);

                    lines.addChild(line2);

                    //show line2
                    //line2.visible = true;
                    //line2.alpha = 100;
                    trace('line didnt appear');

                }
                //run this if line1 is not touching mirror1
                else
                {
                    //redraw line 1 to reach the end of the stage
                    line1.graphics.clear();
                    line1.graphics.lineStyle(2,0x000000,1);
                    line1.graphics.moveTo(0,200);
                    line1.graphics.lineTo(550,200);

                    //hide line2
                    //line2.alpha = 0;
                }
            }
            //END LEVEL 1 RECHECK//
        }
    }

}

这是我的 .FLA 文件中的代码:

//import libraries
import flash.display.Shape;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Graphics;

//create variables
var globe1:MovieClip = new globe;
var mirror1:MovieClip = new mirror;

//create display containers
var lines:MovieClip = new MovieClip;
var mirrors:MovieClip = new MovieClip;
var concaves:MovieClip = new MovieClip;
var convexes:MovieClip = new MovieClip;
var globes:MovieClip = new MovieClip;

//create shapes for this level
var line1:Shape = new Shape;
var line2:Shape = new Shape;

//add display containers to the stage
addChild(lines);
addChild(mirrors);
addChild(concaves);
addChild(convexes);
addChild(globes);

//create level object to store level properties
var level:Object = new Object;

//create scene properties
level.mirrors = 1;
level.concaves = 0;
level.convexes = 0;
level.globes = 1;
level.number = 1;

//add all lines to the stage
lines.addChild(line1);
lines.addChild(line2);

//draw line1
line1.graphics.clear();
line1.graphics.lineStyle(2, 0x000000, 1);
line1.graphics.moveTo(0,200);
line1.graphics.lineTo(550, 200);

//4DEBUG: testing to see why line2 dosent appear
line2.graphics.clear();
//add mirrors
mirrors.addChild(mirror1);

//add concaves

//add convexes

//add globes
globes.addChild(globe1);

//position mirrors
mirror1.x = 340;
mirror1.y = 300;

//position globes
globe1.x = 125;
globe1.y = 50;

//create listeners
mirror1.addEventListener(MouseEvent.MOUSE_DOWN, dragMirror1);
mirror1.addEventListener(MouseEvent.MOUSE_UP, releaseMirror1);
stage.addEventListener(Event.ENTER_FRAME, reCheck);

我的舞台是空的,我现在只有一帧。地球和镜像影片剪辑在我的库中,其中包含我在代码中创建它们时使用的 AS3 链接名称。

我正在尝试创建类似于http://raphaelhennessy.com/misc/Explanation.png 中描述的内容(忽略文本“LightStage Explanation”下方的所有内容)-但我的问题是,尽管我可以将初始行(第 1 行)“缩小”并停在镜子当镜子放在线的顶部时,line2不会出现并从镜子开始,像预期的那样向上到舞台的顶部。

提前致谢,

-拉夫

【问题讨论】:

  • ..所以,什么是你的问题?什么不起作用?来吧伙计,如果您无法描述问题,我们应该如何帮助您? “没有按预期工作”是什么意思?你的加速结果是什么?
  • 我认为您忘记将 lightstage_debug 指定为您的文档类(来自 File > ActionScript Settings )。
  • @DodgerThud 抱歉,我忘了说我的问题是,虽然 line1 在镜子经过它时会像预期的那样有效地“收缩”,但 line2 并没有像我想要的那样出现。我编辑了我的帖子以包含它。
  • @akmozo 我已将 lightstage_debug 指定为类。 raphaelhennessy.com/misc/Explanation.png 也可以更好地描述我想要发生的事情 - 忽略文本“LightStage Explanation”下方的所有内容
  • 您似乎希望 line2.graphics.lineTo(0,200); 成为 line2.graphics.lineTo((mirror1.x + (mirror1.width/2)), 0);。现在你只是在相反的方向上画线。

标签: actionscript-3 flash actionscript


【解决方案1】:

您似乎希望 line2.graphics.lineTo(0,200); 成为 line2.graphics.lineTo((mirror1.x + (mirror1.width/2)), 0);。现在你只是在相反的方向上画线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 2011-07-23
    • 1970-01-01
    • 2016-01-29
    • 2023-03-21
    • 2017-10-24
    • 2016-03-16
    • 1970-01-01
    相关资源
    最近更新 更多