剣で空を飛ぶ!

,,,
今回はpollBlockHitsという、触ったブロックを検出するプログラムを使って空を飛でみます。まずは、こんなコードを実行してみます。 [python] import mcpi.minecraft as minecraft import time mc = minecraft.Minecraft() while True: hits = mc.events.pollBlockHits() if hits: for h in hits: mc.postToChat(h.pos.x) mc.postToChat(h.pos.y) mc.postToChat(h.pos.z) mc.postToChat(h.face) mc.postToChat(h.type) mc.postToChat(h.entityId) time.sleep(0.1) [/python] whileループで繰り返しながら、pollBlockHitsをしています。 このpollBlockHits、利き手に剣を持った状態で、右クリック(ブロックを置くのと同じ操作)すると、そのイベントが記録されます。どんな感じに記録されるかと言うと、 チャットに出力したように、 -93  1  55  7  0  216 こんな感じで記録されます。これは順番に触ったブロックの
  • x座標
  • y座標
  • z座標
  • 方向
  • イベントタイプ(いつも0)
  • エンティティID(今度詳しく)
です。 さて、このpollBlockHitsを使って、何回かに渡って面白いことをやってみましょう。今日は飛んでみます。コードはこんな感じ。 [python] import mcpi.minecraft as minecraft import time import mcpi.block as block from mcpi.vec3 import Vec3 mc = minecraft.Minecraft() def fly(): while True: if len(mc.events.pollBlockHits()): mc.player.setPos(mc.player.getPos() + Vec3(0,3,0)) time.sleep(0.1) fly() [/python] pollBlockHitsのイベントの中身は見ていませんが、イベントがあったか(右クリックしたかどうか)だけをみて、あったら主人公を上に飛ばしています。右クリックしたら飛ぶってことですね。飛んでみると、 おぉー飛んだ。まだまだ飛んだ! 飛びすぎかな~~、あ、落ちた! あ~あ、死んじゃいました。飛びすぎには注意ですね。着地は水の上がいいかもしれません。 [amazon_link asins='1119269067,3864903734,4800711657,4839960488,479814911X,4800711274' template='ProductCarousel' store='kikushun-22' marketplace='JP' link_id='8fc8bd6a-4ea4-11e7-9891-d399843555be']