forked from: flash on 2010-2-25
forked from flash on 2010-2-25 (diff: 52)
ただ単純にsin波とcos波の波線を2つ同時に表示しようと思ったんですが、 なぜかこんなんになってしまったのです。すみません。どなたかよろしくお願いします。
ActionScript3 source code
/**
* Copyright meat18 ( http://wonderfl.net/user/meat18 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ciif
*/
// forked from 084's flash on 2010-2-25
/*ただ単純にsin波とcos波の波線を2つ同時に表示しようと思ったんですが、
なぜかこんなんになってしまったのです。すみません。どなたかよろしくお願いします。*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
public class Wave extends Sprite {
private var angle:Number = 0;
private var centerY:Number = 200;
private var range:Number = 50;
private var xspeed:Number = 1;
private var yspeed:Number = .05;
private var xpos:Number;
private var ypos:Number;
private var xpos2:Number;
private var ypos2:Number;
//initとinit2を統合すると原因がよくわかります。
public function Wave() {
init();
}
public function init():void{
xpos = 0;
xpos2 = 0;
graphics.lineStyle(1, 0, 1);
graphics.moveTo(0, centerY);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//描画開始地点を先に計算
ypos = centerY + Math.sin(angle) * range;
ypos2 = centerY + Math.cos(angle) * range;
//graphics.lineStyle(1, 0, 1);重複するので削除
//graphics.moveTo(0, centerY);重複するので削除
//addEventListener(Event.ENTER_FRAME, onEnterFrame2);
}/*
public function init2() {
xpos2 = 0;
graphics.lineStyle(1, 0, 1);
graphics.moveTo(0, centerY);
addEventListener(Event.ENTER_FRAME, onEnterFrame2);
}*/
public function onEnterFrame(event:Event):void {
/*
xpos += xspeed;
angle += yspeed;
ypos = centerY + Math.sin(angle) * range;
graphics.lineTo(xpos, ypos);
xpos2 += xspeed;
angle += yspeed;
ypos2 = centerY + Math.cos(angle) * range;
graphics.lineTo(xpos2, ypos2);
上記の記述だと、xpos,yposからxpos2,ypos2に向かってラインが引かれるので塗りつぶされてしまいます。
*/
graphics.moveTo(xpos,ypos);//描画の開始地点を旧xpos,ypos地点に移動
xpos += xspeed;//xpos,yposを計算
angle += yspeed;
ypos = centerY + Math.sin(angle) * range;
graphics.lineTo(xpos, ypos);//新xpos,yposへラインを描写
graphics.moveTo(xpos2,ypos2);//描画の開始地点を旧xpos2,ypos2地点に移動
xpos2 += xspeed;
angle += yspeed;
ypos2 = centerY + Math.cos(angle) * range;
graphics.lineTo(xpos2, ypos2);
//描画を止めないとメモリが大変なことに!
if(xpos > stage.stageWidth){
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
addEventListener(Event.ADDED_TO_STAGE,function(e:Event):void{if("autoSize" in e.target){e.target.autoSize="left";}},true);
TextField(addChild(new TextField)).text = "描画終了";
}
}/*
重複するので削除
public function onEnterFrame2(event:Event):void {
xpos2 += xspeed;
angle += yspeed;
ypos2 = centerY + Math.cos(angle) * range;
graphics.lineTo(xpos2, ypos2);
}
*/
}
}
/*
最後に・・・
三角関数の理解が怪しいので、そっち方面で間違いがあったらすみません。。。
*/
