2015-10-27 55 views
-2

我的程序是一个简单的游戏,其中彩色矩形在屏幕上下垂。您的播放器根据您点击的按钮而改变颜色,目的是让您的播放器与下落的对象具有相同的颜色。我如何做一个命中的测试对象,并检查两种颜色是否相同。如何检查两个对象是否在AS3的命中测试中是相同的颜色

这里是我的代码:

import flash.geom.ColorTransform; 
import flash.events.TimerEvent; 

var rectangle:Shape = new Shape; 
var RecTimer:Timer = new Timer(5); 
var RecSTimer:Timer = new Timer(800); 
var collision:Timer = new Timer(10,1000); 
collision.start() 
RecTimer.addEventListener(TimerEvent.TIMER, onTimer); 
RecTimer.start(); 
RecSTimer.addEventListener(TimerEvent.TIMER, onSpawnTimer); 
RecSTimer.start(); 
collision.addEventListener(TimerEvent.TIMER, fcollision) 


function fcollision(e:TimerEvent):void { 
    for each(var rectangle:Shape in rectangles) 
    { 
     if (mcPLayer.hitTestObject(rectangle)) { 

     } 
     } 
    } 

var rectangles:Array = []; // a list of all the rectangles we've made so far 
function spawnRectangle():void { 
    var rectangle:Shape = new Shape(); 
    rectangle.graphics.beginFill(randomColor()); // choosing the colour for the fill, here it is red 
    rectangle.graphics.drawRect(0, 10, 480, 45.49); // (x spacing, y spacing, width, height) 
    rectangle.graphics.endFill(); 
    addChild(rectangle); // adds the rectangle to the stage 
    rectangles.push(rectangle); // adds the rectangle to our list of rectangles 




} 
var colors:Array = [0xFF0000, 0x00FF00, 0x0000FF]; 

function randomColor():uint 
{ 
    return colors[int(Math.random()*colors.length)]; 
} 
function moveAllRectangles():void { 
    for each (var rectangle:* in rectangles) { 
      rectangle.y +=2; 
     if (rectangle.y == 550){ 
      removeChild(rectangle) 
     } 

        } 

    } 

function onTimer(e:TimerEvent):void { 
     moveAllRectangles(); 

} 
function onSpawnTimer(e:TimerEvent):void { 
    spawnRectangle(); 
} 
btnRed.addEventListener(MouseEvent.CLICK, fred); 
btnGreen.addEventListener(MouseEvent.CLICK, fgreen); 
btnBlue.addEventListener(MouseEvent.CLICK, fblue); 

function fred (e:MouseEvent):void{ 
var myColorTransform = new ColorTransform(); 
myColorTransform.color = 0xFF0000; 
mcPLayer.transform.colorTransform = myColorTransform; 
} 

function fgreen (e:MouseEvent):void{ 
var myColorTransform = new ColorTransform(); 
myColorTransform.color = 0x00FF00; 
mcPLayer.transform.colorTransform = myColorTransform; 
} 
function fblue (e:MouseEvent):void{ 
var myColorTransform = new ColorTransform(); 
myColorTransform.color = 0x0066CC; 
mcPLayer.transform.colorTransform = myColorTransform; 
} 

function delayedFunctionCall(delay:int, func:Function) { 
    var timer:Timer = new Timer(delay, 1); 
    timer.addEventListener(TimerEvent.TIMER, func); 
    timer.start(); 
} 
+0

怎么样'obj1.transform.colorTransform.color == obj2.transform.colorTransform.color'? – akmozo

+0

你有没有考虑过扩展'Shape'来给它一个公共变量来存储它的颜色?然后,您可以将其与玩家当前颜色的变量进行比较。 –

+0

如何将'Shape'扩展为公共变量。 – jackmrobertson

回答

0

有,你可以做到这一点的几种方式。一种简单的方法是按照评论中的建议并使用ColorTransform。

这将是这样的:

//call this function anytime the player needs to change color (and also right at the start with the default color) 
function changePlayerColor(color:uint):void { 
    //create a new color transform object 
    var clr:ColorTransform = new ColorTransform(); 
    clr.color = color; //give it a color 
    mcPlayer.transform.colorTransform = clr; //attach it to the player (which just tints the movie clip with that color) 
} 

function spawnRectangle():void { 
    var rectangle:Shape = new Shape(); 
    rectangle.graphics.beginFill(0); //doesn't matter what color you fill with, as the color transform below will tint it 

    //create a new color transform, then assign the color property 
    var clr:ColorTransform = new ColorTransform(); 
    clr.color = randomColor(); 

    //assign the newly created color transform to the rectangle 
    rectangle.transform.colorTransform = clr; 

    rectangle.graphics.drawRect(0, 0, 480, 45.49); 
    rectangle.graphics.endFill(); 
    addChild(rectangle); 

    rectangle.x = 0; 
    rectangle.y = 10; 

    rectangles.push(rectangle); 
} 

function fcollision(e:TimerEvent):void { 
    for each(var rectangle:Shape in rectangles){ 
     if (mcPLayer.hitTestObject(rectangle) && mcPlayer.transform.colorTransform.color === rectangle.transform.colorTransform.color) { 
      //there was a hit test, and the colors match 
     } 
    } 
} 

如果上面是太简单了(例如,您不希望您的播放器调成纯色美观的原因),那么你可以只添加动态属性的球员,告诉你它们的颜色:

function changePlayerColor(color:uint):void { 
    //since movie clips are dynamic, you can just make up a property on it and give it a value like the next line 
    mcPlayer.myColor = color; 

    //now do what need to do to make the player look the way you'd like 
} 

然后检查针对:

if (mcPLayer.hitTestObject(rectangle) && mcPlayer.myColor === rectangle.transform.colorTransform.color){ 

} 
相关问题