接触する円と線
マウスを画面左右に動かすと線がそれぞれ動きます。
円はStageの外に出ると上からまた降ってきます。
♥0 |
Line 111 |
Modified 2011-07-31 11:03:00 |
MIT License
archived:2017-03-20 07:48:33
ActionScript3 source code
/**
* Copyright yuugurenote ( http://wonderfl.net/user/yuugurenote )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/v720
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.display.DisplayObject;
[SWF(width=465,height=465,backgroundColor=0xFFFFFF,frameRate=60)]
public class Main110731_01 extends Sprite {
public var sw:Number=stage.stageWidth;
public var sh:Number=stage.stageHeight;
private var myGravity:Number=0.1;
private var myBounce:Number=-0.5;
private var _myCircle:myCircle;
private var _myTriangle:myTriangle;
private var _myLine:myLine;
public function Main110731_01() {
//三角形を配置
_myTriangle=new myTriangle ;
_myTriangle.x=sw/2;
_myTriangle.y=sh-130;
addChild(_myTriangle);
//ラインを配置
_myLine=new myLine ;
_myLine.x=sw/2;
_myLine.y=sh-130;
stage.addChild(_myLine);
//円を配置
_myCircle=new myCircle ;
_myCircle.x=sw/2;
_myCircle.y=100;
addChild(_myCircle);
addEventListener(Event.ENTER_FRAME,xEnter);
}
private function xEnter(e:Event):void {
_myLine.moveLine();
_myCircle.vy+=myGravity;
_myCircle.x+=_myCircle.vx;
_myCircle.y+=_myCircle.vy;
if (_myCircle.y>sh) {
_myCircle.y=100;
_myCircle.x=sw/2;
_myCircle.vx=0;
_myCircle.vy=0;
}
var myBound:Rectangle=_myLine.getBounds(this);
if (_myCircle.x>myBound.left&&_myCircle.x<myBound.right) {
var angle:Number=_myLine.rotation*Math.PI/180;
var cos:Number=Math.cos(angle);
var sin:Number=Math.sin(angle);
var x1:Number=_myCircle.x-_myLine.x;
var y1:Number=_myCircle.y-_myLine.y;
var y2:Number=cos*y1-sin*x1;
if (y2>- _myCircle.height/2) {
var x2:Number=cos*x1+sin*y1;
var vx1:Number=cos*_myCircle.vx+sin*_myCircle.vy;
var vy1:Number=cos*_myCircle.vy-sin*_myCircle.vx;
y2=- _myCircle.height/2;
vy1*=myBounce;
x1=cos*x2-sin*y2;
y1=cos*y2+sin*x2;
_myCircle.vx=cos*vx1-sin*vy1;
_myCircle.vy=cos*vy1+sin*vx1;
_myCircle.x=_myLine.x+x1;
_myCircle.y=_myLine.y+y1;
}
}
}
}
}
import flash.display.Sprite;
class myCircle extends Sprite {
public var radius:Number=10;
public var speed:Number=1;
public var r:Number;
public var vx:Number=0;
public var vy:Number=0;
public function myCircle() {
graphics.beginFill(0xCCCCCC,1);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
}
class myTriangle extends Sprite {
public function myTriangle() {
graphics.lineStyle(1,0xCCCCCC,1);
graphics.beginFill(0xCCCCCC,1);
graphics.moveTo(0,0);
graphics.lineTo(15,26);
graphics.lineTo(-15,26);
graphics.lineTo(0,0);
graphics.endFill();
}
}
class myLine extends Sprite {
public function myLine() {
graphics.lineStyle(1,0x1F1F1F,0.5);
graphics.moveTo(0,0);
graphics.lineTo(200,0);
graphics.lineTo(-200,0);
}
public function moveLine():void {
if (stage.mouseX>stage.stageWidth/2) {
this.rotation+=1;
if (this.rotation>=20) {
this.rotation=20;
}
}
if (stage.mouseX<stage.stageWidth/2) {
this.rotation-=1;
if (this.rotation<=-20) {
this.rotation=-20;
}
}
}
}