AS3:图形 API 未按预期工作
AS3: graphics API not working as expected
我一直在做一个 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' 下方的所有内容)- 但我的问题是,虽然我可以将初始行 (line1) 获取到 'shrink' 并在镜子放在线的顶部时停在镜子处,线 2 不会出现并从镜子开始,像预期的那样向上到达舞台的顶部。
提前致谢,
-拉夫
您似乎希望 line2.graphics.lineTo(0,200);
成为 line2.graphics.lineTo((mirror1.x + (mirror1.width/2)), 0);
。现在你只是在相反的方向上画一条线。
我一直在做一个 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' 下方的所有内容)- 但我的问题是,虽然我可以将初始行 (line1) 获取到 'shrink' 并在镜子放在线的顶部时停在镜子处,线 2 不会出现并从镜子开始,像预期的那样向上到达舞台的顶部。
提前致谢,
-拉夫
您似乎希望 line2.graphics.lineTo(0,200);
成为 line2.graphics.lineTo((mirror1.x + (mirror1.width/2)), 0);
。现在你只是在相反的方向上画一条线。