ラブなんとか、っぽいの
当たり判定をやりたくなったので
♥0 |
Line 244 |
Modified 2011-02-03 01:51:55 |
MIT License
archived:2017-03-20 17:26:01
| (replaced)
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();
}
}
