Actionscript 3 AS3 hitTestObject==false
我的游戏中有一个生命条,每当仆从没有抓到香蕉时,生命条就会减少。它工作得很好,但问题是,生命棒在接触地面之前就减少了。我是否需要在地面上添加另一个命中测试,并将其放在&&语句中? 主程序:Actionscript 3 AS3 hitTestObject==false,actionscript-3,flash,Actionscript 3,Flash,我的游戏中有一个生命条,每当仆从没有抓到香蕉时,生命条就会减少。它工作得很好,但问题是,生命棒在接触地面之前就减少了。我是否需要在地面上添加另一个命中测试,并将其放在&&语句中? 主程序: import flash.display.MovieClip; import flash.events.KeyboardEvent; import flash.events.Event; var leftKey:Boolean; var rightKey:Boolean; var upKey:Boolean
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
var leftKey:Boolean;
var rightKey:Boolean;
var upKey:Boolean;
var downKey:Boolean;
var jump:Boolean = false;
var xvelocity:int = 9;
var yvelocity:int = 3;
var gravity:Number = 7;
stage.addEventListener(Event.ENTER_FRAME, changeVelocity);
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown);
function changeVelocity(evt:Event){
moveMinion();
yvelocity += gravity;
}
function moveMinion(){
if (leftKey == true){
sideMinion.x -= xvelocity;
sideMinion.left();
}
if (rightKey == true){
sideMinion.x += xvelocity;
sideMinion.right();
}
}
function checkKeyDown(e:KeyboardEvent){
if (e.keyCode == Keyboard.LEFT){
leftKey = true;
}
else if (e.keyCode == Keyboard.RIGHT){
rightKey = true;
}
}
function checkKeyUp(e:KeyboardEvent){
if (e.keyCode == Keyboard.LEFT){
leftKey = false;
}
else if (e.keyCode == Keyboard.RIGHT){
rightKey = false;
}
}
btnStart.addEventListener(MouseEvent.CLICK, makeItFall);
function makeItFall(e:MouseEvent){
var numBananas = 6;
var theBananas: Array = new Array();
theBananas = [];
for (var i = 0; i < numBananas; i++) {
var aBanana: banana = new banana();
theBananas.push(aBanana);
btnStart.visible=false;
aBanana.y=100;
theBananas[i].setSpot(Math.random()*450,Math.random()*200);
theBananas[i].setSpeed((Math.random()), 1);
stage.addChild(aBanana);
}
var health: Number= 100;
var healthPercent: Number= 1;
addEventListener(Event.ENTER_FRAME, pickUpBananas);
function pickUpBananas(event:Event){
for (var i:int = theBananas.length-1; i>-1; i--){
if (sideMinion.hitTestObject(theBananas[i])){
stage.removeChild(theBananas[i]);
theBananas.splice(i,1);
}
else if (sideMinion.hitTestObject(theBananas[i])==false){
health=health-10;
healthPercent=health/100;
trace(healthPercent);
life.scaleX= healthPercent;
}
}
}
}
stop();
您的问题基本上在else块中。你说如果香蕉击中,做x,否则做y。这就是问题所在。如果香蕉击中仆从,你可以保留你的第一部分,做x,如果香蕉击中底部,你可以添加y 除掉其他的 希望这是有道理的 编辑:
return语句是这样的:如果删除香蕉,则退出该函数,而不是继续执行下一个if语句并检查已删除的香蕉 问题是,在同一行中,我遇到了两个语法错误,这两个错误根本没有意义。第85行第51列在equal之前需要标识符,第102列在右括号之前需要分号。第85行是else语句所在的行。完美:部分问题是我仍然在语句中保留了&。非常感谢。
package {
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.Event;
public class banana extends MovieClip {
var velX: Number = 0;
var velY: Number = 0;
var falling: Boolean = false;
var gravity: Number = 2;
public function banana() {
var timing: Timer = new Timer(25, 0);
timing.addEventListener(TimerEvent.TIMER, moveMe);
timing.start();
}
private function moveMe(event: TimerEvent)
{
x += velX;
y += velY;
if (falling) velY += gravity;
/* trace("[BANANA] position:", x, y, "speed:", velX, velY);*/
}
public function setSpeed(dx,dy) {
velX = dx;
velY = dy;
}
public function setSpot(atX,atY){
this.x=atX;
this.y=atY;
}
public function makeItFall (){
falling=true;
}
}
}
if (the banana is hitting the minion){
// add health or whatever
// remove banana from array
return;
}
if (the banana hits the floor){
// lose health or whatever
// remove banana from array
return;
}