ラブなんとか、っぽいの

by hig_an
当たり判定をやりたくなったので
♥0 | Line 244 | Modified 2011-02-03 01:51:55 | MIT License | (replaced)
play

ActionScript3 source code

/**
 * Copyright hig_an ( http://wonderfl.net/user/hig_an )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/j1CG
 */

package {
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.events.MouseEvent;
	import flash.geom.ColorTransform;
	import flash.utils.Timer
	import flash.events.TimerEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.net.URLRequest;
	import flash.display.LoaderInfo;
	import flash.system.LoaderContext;

	
	public class Main extends Sprite {
		private var score:Number = 0;
		private var scoreCalc:ScoreCalc;
		private var scBoard:ScoreBoard;
		private var numOfCircle:Number = 20;
		private var circleList:Array;
		private var line:LineOfCircles;
		private var clicked:Boolean;
		private var mousePoint:Point;
		private var girlBmpd:BitmapData;
		private var loader:Loader;
		
		private var moving:Boolean;
		
		private var timer:Timer;
		private var colorTf:ColorTransform;
		
		private var bmpd:BitmapData;
		private var mt:Matrix;
		private var sp:Sprite;
		
		
		public function Main():void {
			var context:LoaderContext = new LoaderContext(true);
			loader = new Loader();
			loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/c/c8/c8d9/c8d966ec80459170f455b0f43015cf781ff2224b"), context);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
		}
		
		private function complete(e:Event):void {
			var info:LoaderInfo = e.target as LoaderInfo;
			
			mousePoint = new Point(0, 0);
			clicked = false;
			scoreCalc = new ScoreCalc(mouseX,mouseY);
			scBoard = new ScoreBoard("Score");
			addChild(scBoard);
			circleList = new Array();
			line = new LineOfCircles(numOfCircle);
			moving = false;
			
			timer = new Timer(500);
			bmpd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x0);
			girlBmpd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);
			mt = new Matrix();
			sp = newFig(0, 0);
			colorTf = new ColorTransform();
			
			addChild(new Bitmap(girlBmpd));
			mt.identity()
			mt.translate(160, stage.stageHeight - 319);
			
			girlBmpd.draw(loader,mt);
			addChild(new Bitmap(bmpd));
			
			addEventListener(Event.ENTER_FRAME, loop);
			timer.addEventListener(TimerEvent.TIMER, onTimerEvent);
			timer.start();
			
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}
		private function onMouseDown(e:MouseEvent):void {
			clicked = true;
		}
		private function onMouseUp(e:MouseEvent) :void{
			clicked = false;
		}
		public function loop(e:Event) :void {
			var touched:Boolean = girlBmpd.hitTest(girlBmpd.rect.topLeft, 255, new Point(mouseX, mouseY));
			if (clicked && touched) {
				mousePoint.x = mouseX;
				mousePoint.y = mouseY;
			}
			line.update(mousePoint.x, mousePoint.y);
			
			bmpd.lock()
			bmpd.fillRect(bmpd.rect, 0xFFFFFF);
			for (var i:int = 0 ; i < line.length ; i++) {
				mt.identity();
				mt.translate(line.list[i].x,line.list[i].y);
				bmpd.draw(sp, mt, colorTf);
			}
			bmpd.unlock();
		}
		private function onTimerEvent(e:TimerEvent) :void {
			scoreCalc.calculation(mousePoint.x, mousePoint.y);
			colorTf = scoreCalc.colorTf;
			score = scoreCalc.score;
			scBoard.updateScore(score);
		}
		private function reset() :void{
		}
		private function newFig(xx:Number,yy:Number) :Sprite{
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0x0);
			s.graphics.drawCircle(xx, yy, 10);
			s.graphics.endFill()
			
			return s;
		}
	}
}
class Circle {
	public var x:Number = 0;
	public var y:Number = 0;
	public function Circle(xx:Number, yy:Number ) {
		x = xx;
		y = yy;
	}
}
 class LineOfCircles{
	public var list:Array;
	private var _numOfList:int;
	private var _myNum:Number;
	
	public function LineOfCircles(length:int) {
		_numOfList = length;
		list = new Array();
	}
	public function update(xx:Number, yy:Number) :void {
		if (list.length >= _numOfList) {
			list.shift();
		}
		list.push(new Circle(xx, yy));		
	}
	public function get length():uint {
		return list.length;
	}
}
import flash.geom.ColorTransform;
import flash.geom.Point;

 class ScoreCalc {
	private const BONUS_SCORE:Number = 1000;
	
	private var _myScore:Number;
	private var _preScore:Number;
	
	private var _colorTf:ColorTransform;
	private var _mouseIsMoving:Boolean;
	private var _bonusAdded:Boolean;
	
	private var _preMousePoint:Point;
	private var _curMousePoint:Point;
	private var _distanceOfMouse:Number;
	private var _bonusStar:Number;
	public function ScoreCalc(preX:Number,preY:Number) {
		_preMousePoint = new Point(preX, preY);
		_curMousePoint = new Point(0, 0);
		_distanceOfMouse = 0;
		_myScore = 0;
		_preScore = 0;
		_bonusStar = 1;
		_colorTf = new ColorTransform();
		_mouseIsMoving = false;
		_bonusAdded = false;
	}
	public function calculation(curX:Number,curY:Number):void {
		_curMousePoint.x = curX;
		_curMousePoint.y = curY;
		
		var num1:Number = _preMousePoint.x - _curMousePoint.x;
		var num2:Number = _preMousePoint.y - _curMousePoint.y;
		
		_distanceOfMouse = Math.sqrt((num1 * num1 ) + (num2 * num2));
		if ((0 < _distanceOfMouse)&&(_distanceOfMouse <= 50)) {
			//So Kind yellow
			_preScore = 15;
			_colorTf = color(255, 255, 0);
			_bonusStar++;
		}else if (( 50 < _distanceOfMouse) && (_distanceOfMouse <= 100)){
			//normal red
			_preScore = 10;
			_colorTf = color(255, 0, 0);
			_bonusStar = 1;
		}else if ((100 < _distanceOfMouse)&&( _distanceOfMouse<= 200)) {
			//too hard blue
			_preScore = 5
			_colorTf = color(0, 0, 255);
			_bonusStar = 1;
		}else if (_distanceOfMouse == 0) {
			//stop white
			_preScore = -5;
			_colorTf = color(200, 200, 200);
			_bonusStar = 1;
		}else {
			// black
			_preScore = -10;
			_colorTf = color(0, 0, 0);
			_bonusStar = 1;
		}
		_isMouseMoving();
		_preMousePoint.x = _curMousePoint.x;
		_preMousePoint.y = _curMousePoint.y;
	}
	public function get score() :Number {
		_bonusCalc(_bonusStar);
		return _myScore += _preScore;
	}
	public function get colorTf():ColorTransform {
		return _colorTf;
	}
	public function get mouseIsMoving():Boolean {
		return _mouseIsMoving;
	}
	private function _isMouseMoving():void {
		if (_distanceOfMouse == 0) {
			_mouseIsMoving =  false;
		}else{
			_mouseIsMoving =  true;
		}
	}
	private function color(r:Number, g:Number, b:Number):ColorTransform{
		var col:ColorTransform = new ColorTransform();
		col.redOffset	= r;
		col.greenOffset	= g;
		col.blueOffset	= b;
		
		return col;
	}		
	private function _bonusCalc(bonusPoint:Number):void {
		if (bonusPoint % 10 == 0) {
			_myScore += BONUS_SCORE
			_bonusAdded = true;
		}else {
			_bonusAdded = false;
		}
	}
	public function get bonusAdded():Boolean {
		return _bonusAdded
	}
}
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
 class ScoreBoard extends Sprite
{
	private var tf:TextField;
	private var myLabel:String;
	public function ScoreBoard(label:String,defaltNum:Number = 0) 
	{
		tf = new TextField();
		myLabel = label;
		
		tf.defaultTextFormat = new TextFormat("_typeWriter", 40, 0x0, true);
		tf.autoSize = "left";
		addChild(tf);
		tf.text = myLabel + ":" + defaltNum.toString();
		tf.x = 0;
	}
	public function updateScore(score:Number):void {
		tf.text = myLabel + ":" + score.toString();
	}
	
}