2011-01-16 25 views
1

最近私はアクションスクリプトを手に入れました。私は自分自身を単純な弓と矢のゲームにすることにしました。これまで私は矢印を弓状に飛ばせました。だから次は私の弓を作って、実際に弦を引っ張ることができる。弓を引っ張る[Flash as3]

これまでのところ私は弓をMCとして描き、文字列を描くためにグラフィックを使用すると考えました。 私は実際にストリングを引っ張るべき場所にいるので、ここから進める方法が分かりません。どんなアドバイスも非常に感謝しています。

可能であれば、自分でコードを作成したいポインタを私に与えてください。私は完成した結果を求めていません。

コード:両方の答えは私を助け

package { 

    import flash.display.MovieClip; 
    import flash.display.Shape; 
    import flash.display.Stage; 
    import flash.events.MouseEvent; 


    public class bow extends MovieClip { 
     var myStage:Stage; 
     var bowString:Shape; 
     var bowStringMc:MovieClip; 

     public function bow(stageRef) { 
      this.myStage = stageRef; 

      myStage.addChild(this); 
      this.x = myStage.stageWidth/2; 
      this.y = myStage.stageHeight/2; 

      this.drawBowstring(); 
     } 

     public function drawBowstring() { 
      bowString = new Shape(); 
      bowStringMc = new MovieClip(); 

      bowStringMc.addChild(bowString); 
      myStage.addChild(bowStringMc); 

      bowString.graphics.lineStyle(2, 0x000000); 
      bowString.graphics.curveTo(-50,this.height/2,0,(this.height-10)); 

      bowStringMc.x = this.x-1; 
      bowStringMc.y = this.y - this.height/2 + 5; 

      bowStringMc.addEventListener(MouseEvent.MOUSE_DOWN, pullBowstring); 
     } 

     public function pullBowstring(e:MouseEvent) { 
      // Have to start redrawing the graphic i gess but how? 
     } 
    } 

} 

更新

ThxをvvMINOvv & Slomojo、! 私は現在、2本の線を持っています。これは、弓が引き戻されたときに描くグラフィックです。

誰が私はそれをやったかを確認したい場合は、相続人ラフスニップ:この段階で

public function drawBowstring() { 
     bowStringTop = new Shape(); 
     bowStringBottom = new Shape(); 
     bowStringMc  = new MovieClip(); 

     bowStringMc.addChild(bowStringTop); 
     bowStringMc.addChild(bowStringBottom); 

     myStage.addChild(bowStringMc); 

     bowStringTop.graphics.lineStyle(2, 0x000000); 
     bowStringTop.graphics.moveTo(0, 0); 
     bowStringTop.graphics.lineTo(0, this.height/2); 

     bowStringBottom.graphics.lineStyle(2, 0x000000); 
     bowStringBottom.graphics.moveTo(0, this.height-10); 
     bowStringBottom.graphics.lineTo(0, this.height/2); 

     bowStringMc.x = this.x-1; 
     bowStringMc.y = this.y - this.height/2 + 5; 

     this.hand.addEventListener(MouseEvent.MOUSE_DOWN, pullBowstring); 
    } 

    public function pullBowstring(e:MouseEvent) { 
     myStage.addEventListener(MouseEvent.MOUSE_MOVE, reDrawBowstring); 
     myStage.addEventListener(MouseEvent.MOUSE_UP, releaseBowstring); 
    } 

    public function releaseBowstring(e:MouseEvent) { 
     myStage.removeEventListener(MouseEvent.MOUSE_MOVE, reDrawBowstring); 
     myStage.removeEventListener(MouseEvent.MOUSE_UP, releaseBowstring); 
    } 

    public function reDrawBowstring(e:MouseEvent) { 
     if (this.hand.x < -18 || this.hand.x > 0) { 
      this.releaseBowstring(e); 
     } 
     this.hand.x = mouseX; 
     this.arrow.x = mouseX; 

     bowStringTop.graphics.clear(); 
     bowStringBottom.graphics.clear(); 

     bowStringTop.graphics.lineStyle(2, 0x000000); 
     bowStringTop.graphics.moveTo(0, 0); 
     bowStringTop.graphics.lineTo(this.hand.x, (this.height/2)-5); 

     bowStringBottom.graphics.lineStyle(2, 0x000000); 
     bowStringBottom.graphics.moveTo(0, this.height-10); 
     bowStringBottom.graphics.lineTo(this.hand.x, (this.height/2)-5); 
    } 

答えて

1

ドロークラスはフラッシュで使用できます。したがって、簡単な例がこのように見えるでしょう。

これは、弓の上端から下端まで直線を描き、マウスがある方向に湾曲します。このコードは、フラッシュがディスプレイや何かをリフレッシュするたびに呼び出される関数で実行することができます。 clear()は、あなたがすることができますどのような特定の形状とは、それを再描画することは明らかであるそのが

うまくいけば、これはあなたに

+0

Thx、私は明確に行きます。私はそれが私の問題を解決するだろうと思う:) – Michael

1

最善のことは、あなたが弓と対話したい正確にどのように定義することです。

レンダリングのスケールに応じて、マウスのポインタにマウスが追従するように弓の文字列を描画するだけで、好みの制限に制約されます。

プルバックでは、弓の両端から拘束されたマウスの位置までの2本の線として文字列を描画するのが最適です。

弓を離したときには、弦がフラットポイントに達したときに、特定のポイントで弦を単一のカーブとして描きたいと思うでしょう。文字列の動き。

Tweening Engineについてよく知っていて、そうでない場合は、Desuades Motion Package、Tweensyなどをご覧ください。 (http://fluxdb.fluxusproject.orgで見つけることができます)

+0

良いことも可能であるかについての視点のビットを与えるアニメーション中のようになります。十分に速い間隔で行われていればアイデア、それはまた、私の心を横切って、真ん中から引き出されている2行をしています。ただ、アニメーションをコード化する方法は分かっていません...); – Michael