スクリプト/三角形を描画する関数(履歴ID:646)

最終投稿者:Material 305033 1 mini cfm_ 更新:2016/02/04 08:44:02
16/02/04 大幅改良。精度・画質が大幅に上がりました。同時にサンプルゲームを更新。


使うには、これらから使いたい画像をクリップして、引数のimgに画像IDを入れてください。

【一枚絵】草ポリゴン2


【一枚絵】土ポリゴン2


他の絵を使いたい方は、これを使って画像編集ソフトで作ってください。
gimpの場合の作り方が画像ページに書いてあります。

【一枚絵】三角画像のマスク




#3点を結ぶ三角形を描画(画像, Zオーダー, 頂点の座標・・・)
def draw_triangle(img,z,x1,y1,x2,y2,x3,y3)
  e1=x1-x2
  e2=y1-y2
  lensqr12=e1*e1+e2*e2
  e1=x2-x3
  e2=y2-y3
  lensqr23=e1*e1+e2*e2
  e1=x3-x1
  e2=y3-y1
  if lensqr12>lensqr23
    if lensqr12>e1*e1+e2*e2
      ax=x1
      ay=y1
      bx=x2
      by=y2
      b2x=bx-ax
      b2y=by-ay
      c2x=x3-ax
      c2y=y3-ay
    else
      ax=x3
      ay=y3
      bx=x1
      by=y1
      b2x=bx-ax
      b2y=by-ay
      c2x=x2-ax
      c2y=y2-ay
    end
  else
    if lensqr23>e1*e1+e2*e2
      ax=x2
      ay=y2
      bx=x3
      by=y3
      b2x=bx-ax
      b2y=by-ay
      c2x=x1-ax
      c2y=y1-ay
    else
      ax=x3
      ay=y3
      bx=x1
      by=y1
      b2x=bx-ax
      b2y=by-ay
      c2x=x2-ax
      c2y=y2-ay
    end
  end
  r=atan2(b2y,b2x)
  s = sin(-r)
  c = cos(-r)
  b3x = b2x * c - b2y * s
  c3x = c2x * c - c2y * s
  c3y = c2x * s + c2y * c
  i=createSprite(img)
  xx=floor((c3x/b3x)*69)
  if xx<35
    setSpriteScale(i, b3x/70, c3y/70)
    setSpritePosition(i, ax, ay)
  else
    xx=69-xx
    setSpriteScale(i, -b3x/70, c3y/70)
    setSpritePosition(i, bx, by)
  end
  setSpriteRect(i, (xx%7)*70, floor(xx/7)*70, 69.5, 69.5, 0, 0, 69.5, 69.5)
  setSpriteRotation(i, r)
  setSpriteZOrder(i, z)
end



 この関数のサンプルゲーム



 ゲームのスクリプト
setCanvasVisible(true)
startInput()
pnt=createArray()
n=0
while true
  while hasInput()
    takeInput()
    if isMouseDown()
      pos=getMousePosition()
      pnt[n]=pos[0]
      pnt[n+1]=pos[1]
      n=n+2
      if n==6
        draw_triangle(301131,7,pnt[0],pnt[1],pnt[2],pnt[3],pnt[4],pnt[5])
        drawCanvas()
        n=0
      end
    elsif isKeyDown("ENTER")
       goEnding()
    end
  end
end