# -*- coding: utf-8 -*-
"""
vrmapi.VRMSpriteのラッパとユーティリティ
"""
import vrmapi
[ドキュメント]class Sprite(object):
"""vrmapi.VRMSpriteクラスのラッパ。
SetUV(), SetPos()をした後,frameイベント内でSetSprite()してください。(直接指定モード)
SetUV(), SetOrg(), SetZoom(), SetRotate(), SetTranslate()を設定しておき,
スプライト座標をVRMNXシステム内部で処理してからSetSprite()で表示することもできます。(演算指定モード)
SetPos()かSetOrg()を呼び出すと,SetSprite()での描画モードが相応に切り替わります。
各属性値をを直接いじってSetSprite()も可能です。その際,描画モードはdispdirect属性に従います。
Note:
コンストラクタはリソース画像読み込み済みのSpriteオブジェクトを返します。
Args:
res: リソース画像の番号。
src: リソースの読み込み先となる編成オブジェクトのID。デフォルトではレイアウトのリソースから読み込みます。
Attributes:
uv: UV座標のタプル (u0, v0, u1, v1)
pos: 表示座標のタプル (sx0,sy0, sx1,sy1, sx2,sy2, sx3,sy3)
org: 演算指定モードでの基準サイズ (dx, dy)
trans: 移動量(x,y)
color: 表示色(r,g,b,a)
pivot: 回転中心(x,y)
rot: 回転角度(deg)のfloat。
dispdirect: Trueで直接指定モード。Falseで演算指定モード。
Examples:
>>> sp1 = Sprite(1) #Layoutからリソース1番の画像を読み込み,スプライトオブジェクトを生成
>>> sp1.SetUV(0,0,256,256)
>>> sp1.SetPos(10,10,200,10,10,300,200,300)
frameイベントでスプライトを表示させます。
>>> if ev == 'frame':
>>> sp1.SetSprite()
"""
def __init__(self, res, src=0):
vrmsprite = vrmapi.LAYOUT().CreateSprite()
if src:
vrmsprite.LoadTrainTexture(src, res)
else:
vrmsprite.LoadSystemTexture(res)
self.vrmsprite = vrmsprite
self.uv = None #: UV座標のタプル (u0, v0, u1, v1)
self.pos = None #: 表示座標のタプル (sx0,sy0, sx1,sy1, sx2,sy2, sx3,sy3)
self.org = None #: 演算指定モードでの基準サイズ (dx, dy)
self.zoom = (1.0, 1.0) #: 拡大縮小の倍率 (rx, ry)
self.pivot = (0.0, 0.0) #: 回転中心(x,y)
self.rot = 0.0 #: 回転角
self.trans = (0.0, 0.0) #: 移動量(x,y)
self.color = None #: スプライトのカラー(r,g,b,a). 0.0<=r,g,b,a<=1.0.
self.dispdirect = True #: Trueで直接指定モード
[ドキュメント] def GetTextureDX(self):
"""スプライトにロードしたテクスチャー画像のXサイズを取得する。"""
return self.vrmsprite.GetTextureDX()
[ドキュメント] def GetTextureDY(self):
"""スプライトにロードしたテクスチャー画像のYサイズを取得する。"""
return self.vrmsprite.GetTextureDY()
[ドキュメント] def SetUV(self, u0,v0, u1,v1):
"""スプライトパターンを設定。
u0,v0がスプライトパターンの左上座標。u1,v1は右下の座標。
Note:
vrmapi.VRMSpriteと違い,毎フレームでSetUVを実行する必要はありません。
"""
self.uv = (u0, v0, u1, v1)
[ドキュメント] def SetPos(self, sx0,sy0, sx1,sy1, sx2,sy2, sx3,sy3):
"""スプライトの表示座標を設定
四角形スプライトの画面上の座標を設定します。
このメソッドを実行すると,それ以降は直接指定モードでスプライトを描画します。
Args:
sx0
sy0: 左上座標
sx1
sy1: 右上座標
sx2
sy2: 左下座標
sx3
sy3: 右下座標
Note:
vrmapi.VRMSpriteと違い,毎フレームでSetPosを実行する必要はありません。
"""
self.pos = (sx0,sy0, sx1,sy1, sx2,sy2, sx3,sy3)
self.dispdirect = True
[ドキュメント] def SetOrg(self, orgdx, orgdy):
""" スプライトの基準サイズを設定します。
このメソッドを実行して以降は,演算指定モードでスプライトを描画します。
基準サイズをもとに、拡大縮小、回転、移動の演算を順番に行い、
結果をSetSprite()で表示します。
Args:
orgdx
orgdy: 基準サイズ
"""
self.org = (orgdx, orgdy)
self.dispdirect = False
[ドキュメント] def SetZoom(self, zoomx, zoomy):
"""スプライトの拡大縮小率を設定します。
描画モードが演算指定モードのときに使用されます。
Args:
zoomx
zoomy: 1.0で等倍。
"""
self.zoom = (zoomx, zoomy)
self.dispdirect = False
[ドキュメント] def SetRotate(self, pivotx, pivoty, rot):
"""スプライトの回転を設定します。
描画モードが演算指定モードのときに使用されます。
Args:
pivotx
pivoty: 回転中心座標。0.0で原点。
rot: 回転角度(deg)
"""
self.pivot = (pivotx, pivoty)
self.rot = rot
self.dispdirect = False
[ドキュメント] def SetTranslate(self, x,y):
"""スプライトの移動を設定します。
描画モードが演算指定モードのときに使用されます。
"""
self.trans = (x,y)
self.dispdirect = False
[ドキュメント] def SetColor(self, r,g,b,a):
"""スプライトの色を指定します。
r,g,b,a: 0.0~1.0の数値を設定します。
"""
self.color = (r,g,b,a)
[ドキュメント] def SetSprite(self):
"""スプライトを画面に表示。
直接指定モードか演算指定モードを自動で選択して表示します。
"""
self.vrmsprite.SetUV(self.uv[0], self.uv[1], self.uv[2], self.uv[3])
if self.dispdirect:
# 直接指定モード
self.vrmsprite.SetPos(self.pos[0], self.pos[1], self.pos[2], self.pos[3], self.pos[4], self.pos[5], self.pos[6], self.pos[7])
else:
# 演算指定モード
if self.org:
self.vrmsprite.SetOrg(self.org[0], self.org[1])
self.vrmsprite.SetZoom(self.zoom[0], self.zoom[1])
self.vrmsprite.SetRotate(self.pivot[0], self.pivot[1], self.rot)
self.vrmsprite.SetTranslate(self.trans[0], self.trans[1])
if self.color is not None:
self.vrmsprite.SetColor(self.color[0], self.color[1], self.color[2], self.color[3])
self.vrmsprite.SetSprite()