【发布时间】:2016-11-09 22:26:14
【问题描述】:
大家好,所以我有一个对象character,它最初围绕名为planet 的第一个电影剪辑旋转,它不属于数组。所以用户可以点击屏幕,character 会朝它旋转的方向射击。目标是让character 撞击阵列中的其他行星,然后它开始像原来的一样围绕它旋转。一切正常,除了当我拍摄角色并且它落在aPlanetArray 中的outerplanets 之一时,它并没有开始围绕那个新星球旋转,而是消失了。
我是这样设置的:
字符轨道第一个不在阵列中的行星只是将其作为初始轨道,然后在离开其他外行星后将其移除:
private function startOrbit():void
{
//add Planet
planet.x = (stage.stageWidth / 2);
planet.y = (stage.stageHeight / 2) + 100;
stage.addChild(planet);
//radnom number set up in main class
if (randomOrbit == 1) //If equals to one then clock wise
{
clockWiseOrbiter();
}else
if (randomOrbit == 2) //If equals to one then counter clock wise
{
counterClockWiseOrbiter();
}
}
我在数组中添加外行星:
private function addOuterPlanets():void
{
for (var i:int = 0; i < nPlanets; i++)
{
outerPlanets = new mcOuterPlanets();
outerPlanets.x = startPoint.x + (xSpacing * i);
outerPlanets.y = startPoint.y - (ySpacing * i);
stage.addChild(outerPlanets);
aPlanetArray.push(outerPlanets);
}
}
在我的输入帧处理程序中:
private function logicHandler(e:Event):void
{
if (!tap && !nextlevel)
{
startOrbit(); //start player orbit around planet
}
if (nextlevel)
{
startNewOrbit();
trace("Starting new Orbit");
}
//When tapped have outher planets move down
if (tap)
{
characterTap(); //Character shoots from position
}
collisionPlanetHandler();
}
当与外行星发生碰撞时:
**** 编辑*****
private function collisionPlanetHandler():void
{
for (var i:int = 0; i < aPlanetArray.length; i++)
{
var currentPlanet:mcOuterPlanets = aPlanetArray[i];
if (character.hitTestObject(currentPlanet[i]) && !nextlevel)
{
trace("HIT");
//Have charcter orbit that planet
//startNewOrbit();
//tap back to false
tap = false;
nextlevel = true;
character.destroy();
planet.destroy();
planetHit = currentPlanet[i];
}
}
}
当角色与数组中的外行星发生碰撞时,我会在它着陆的外行星周围发生新轨道。或者我至少尝试一下:
private function startNewOrbit():void
{
newClockWise();
}
private function newClockWise():void
{
for (var i:int = 0; i < aPlanetArray.length; i++)
{
var currentPlanet:mcOuterPlanets = aPlanetArray[i];
stage.addChild(character);
character.rotation = (Math.atan2(character.y - currentPlanet.y, character.x - currentPlanet.x) * 180 / Math.PI);
var rad:Number = angle * (Math.PI / 180); // Converting Degrees To Radians
character.x = currentPlanet.x + radius * Math.cos(rad); // Position The Orbiter Along x-axis
character.y = currentPlanet.y + radius * Math.sin(rad); // Position The Orbiter Along y-axis
angle += speed; // Object will orbit clockwise
}
}
我知道我在 startNewOrbit 和 newClockWise 函数中做错了。我有一个 for 循环,我试图在它接触的数组中定位对象。我使用这个var currentPlanet:mcOuterPlanets = aPlanetArray[i]; 但不确定我是否需要使用currentObject 或类似的东西。有谁知道我做错了什么,为什么它没有绕着它接触的新行星运行,而是完全消失了?
【问题讨论】:
-
“开始新轨道”是否被追踪?
-
是的,它确实被追踪了。
-
您的新顺时针函数循环遍历所有行星并将角色放置在数组中每个行星的 X/y 位置,并在每一帧都执行此操作。对?为什么?
-
不,没关系。好好休息。
-
显然你不能只是复制粘贴这段代码。这是伪代码,但既然你知道如何循环遍历数组并进行命中测试等等……这个例子只是说明了这个想法。让我知道它是否没有意义。
标签: arrays actionscript-3 rotation