我的程序是一个简单的游戏,彩色矩形从屏幕上掉下来。您的播放器会根据您点击的按钮改变颜色,目的是让您的播放器与落下的物体颜色相同。如何进行命中测试对象并检查两种颜色是否相同。
这是我的代码:
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 :(得分: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){
}