2017-07-11 9 views
1

皆さん、こんにちは、私はこれを正しく動作させるためにいくつかの問題を抱えています。私はcharacterと呼ばれるMCオブジェクトを持っていて、もう一つは "ポイント"と呼ばれています。私はplanetContainerと呼ばれるコンテナオブジェクトを持っています。planetContainercharacterを追加します。文字は、コンテナにも追加されたplanetsの周りを回転しています。私が抱えている主な問題は、ポイントのパワーアップがアクティブになってポイントが他の惑星から移動し、character中心の位置に移動することです。完璧に機能していましたが、コードを更新してplanetContainerPointsを削除して、planetsに添付してください。私はlocalToGlobalを使わなければならないかもしれないが、あまり確かではないかもしれないことは分かっている。ここでオブジェクトを別のオブジェクトの位置に移動

はどのように私のセットアップ文字:

private function newCounterClockWise():void 
    { 
     planetContainer.addChild(character); 
     character.rotation = (Math.atan2(character.y - planetHit.y, character.x - planetHit.x) * 180/Math.PI); 
    } 

ポイントが惑星に追加する方法:

private function addPoints():void 
    { 
     points = new mcPoints(); 
     var planetPosition:Point = planetContainer.parent.localToGlobal(new Point(0, 0)); 
     points.x = planetPosition.x; 
     points.y = planetPosition.y; 
     outerPlanets.addChild(points); 
     aPointsArray.push(points); 
    } 

今これは文字に移動しポイントを扱う主な機能であります正しく動作していません。ポイントは動くが、スクリーンから離れるか、ゲームをちょっと微調整して別のことをする。また、「magnetHandlerは();私のenterFrameイベントである:

private function magnetHandler():void 
    { 
     for (var i:int = 0; i < aPointsArray.length; i++) 
     { 
      var currentPoints:mcPoints = aPointsArray[i]; 
      var characterPosition:Point = planetContainer.parent.globalToLocal(new Point(character.x, character.y)); 

      if (currentPoints.hitTestObject(playScreen.mcPointsHit)) 
      { 
       trace("POINTS MID STAGE"); 
       currentPoints.x -= (currentPoints.x - characterPosition.x); 
       currentPoints.y -= (currentPoints.y - characterPosition.y); 
       //currentPoints.x = character.x; 
       //currentPoints.y = character.y; 
       //TweenMax.to(currentPoints, 0.5, {x:characterGlobalPosition.x, y:characterGlobalPosition.y , ease:Power1.easeInOut }); 
      } 
     } 
    } 

誰もが私が間違っているのかを見ることができます

答えて

1

をそれは完全にあなたの質問を理解するために(あるいはあなたが入れている理由を理解するのは難しいです?別々の容器に相互に関係のもの)が、落下のWHEREおそらくこの行は次のとおりです。

var characterPosition:Point = planetContainer.parent.globalToLocal(new Point(character.x, character.y)); 

をあなたが何をしたいのか、文字のx/yがcurrentPoints親空間の座標を取得されることができません。それで、あなたは次のようなことをします:

//first, find the global position of character: 
var globalCharacterPoint:Point = character.localToGlobal(new Point()); 

//then, convert that to the currentPoints parent local space: 
var localCharacterPoint:Point = currentPoints.parent.globalToLocal(globalCharacterPoint); 

また、あなたのこのコードで:

points = new mcPoints(); 
    var planetPosition:Point = planetContainer.parent.localToGlobal(new Point(0, 0)); 
    points.x = planetPosition.x; 
    points.y = planetPosition.y; 

あなたが望むものはおそらくありませんplanetContainerの親のグローバル空間を得ています。あなたがそうしたい:あなたはouterPlanetspointsオブジェクトを追加していることから、あなたはおそらく、それが世界的に0,0に位置していますしない限り、(そのローカル空間に変換したい、

planetContainer.localToGlobal(new Point()); //this gives you the global location of the planet container's top left corner 

そして - それは特に問題ではありません)。

var outerPoint:Point = outerPlanets.globalToLocal(planetPosition); 
points.x = outerPoint.x; 
points.y = outerPoint.y; 

言うまでもなく、ゲームのために、それが本当に

+0

さて、私はより良い今多くのことを理解して(ロケットなどに煙のように)の資産をカプセル化していますしない限り、グローバル座標空間ですべてを持っているのがベストだ、と言っています。それをクリアしていただきありがとうございます。あなたは "おそらくそのローカルスペースに変換したい"と変換すると言った最後の部分については少し混乱しているあなたの方法は素晴らしいとポイントはついにキャラクターに向かって移動するキャラクターが別の惑星に行くとより多くのポイントが来た後です私はこのエラー "nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。"この行については、 "var localCharacterPoint:Point = currentPoints.parent.globalToLocal(globalCharacterPoint);"何かご意見は? – Nathan

+0

Wait nvm何が起こっているのか考え出した。ポイントを破壊していたゲームをセットアップしていたときに、私が完全に忘れていた機能を持っていた – Nathan

+1

まだあなたを混乱させていた部分を解決しようとする答えを編集しました。これがあなたの質問に答えると言うなら、それを受け入れられた答えとしてマークすることを検討してください。まだ何かが明確でない場合は、コメントを残してください。私は明確にしようとします。 – BadFeelingAboutThis

関連する問題