PicoPicoGameEngine

Quick Links

グラフオブジェクト

グラフオブジェクトはキャラクタや図形や文字を画面に描くオブジェクトです。

ppgraph

:tileInfo()

テクスチャのタイル位置設定します。

この関数を使用することでテクスチャの好きな位置を切り出して表示することができます。

引数がないときは設定値を取り出せます。

ppgraph:tileInfo(tile_info)
tile_info = ppgraph:tileInfo()
tile_info : object

タイルの位置を指定するオブジェクトです。次のようなテーブルになっています。

tile_info={
  size={
    width=[タイル横幅],
    height=[タイル高さ]
  },
  stride={
    x=[タイルの横間隔],
    y=[タイルの縦間隔]
  },
  offset={
    x=[タイルの横開始位置],
    y=[タイルの縦開始位置]
  }
}

:put()

タイル番号を指定してキャラクタを描画します。

タイル番号はテクスチャをタイルサイズ(デフォルトは32x32ドット)で分割したものを左上から右に向かって1、2、3...と割り振られた番号です。

ppgraph:put(x,y,tile, [texture_filename], [texture_option],[color])
ppgraph:put({x,y},tile, [texture_filename], [texture_option],[color])
ppgraph:put(pos,tile, [texture_filename], [texture_option],[color])
x : number

X座標

y : number

Y座標

pos : point object

表示位置

tile : number

タイル番号

[texture_filename] : string/optional

テクスチャファイル名、省略した場合はデフォルトテクスチャーが使用されます。

[texture_option] : object/optional

テクスチャオプション

[color] : color object

描画色、省略した場合はppgraph:color()で指定した色で描画します。

img="characters.png"
function start()
  ppgraph:tileInfo(
    {size={width=32,height=32}})
  ppgraph:put(0,0,1,img)
  ppgraph:put({0,32},2,img)
  ppgraph:put({x=0,y=64},3,img)
  ppgraph:tileInfo(
    {size={width=64,height=64}})
  ppgraph:put(32,0,4,img)
end
ppgraph:put(x,y,tile,[texture],[color])
ppgraph:put({x,y},tile,[texture],[color])
ppgraph:put(position,tile,[texture],[color])
x : number

X座標

y : number

Y座標

position : point object

表示位置

tile : number

タイル番号

[texture] : texture object/optional

描画するテクスチャ、省略した場合はデフォルトテクスチャーが使用されます。

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

img="characters.png"
tex = pptex:load(img)
function start()
  ppgraph:tileInfo(
    {size={width=32,height=32}})
  ppgraph:put(0,0,1,tex)
  ppgraph:put({0,32},2,tex)
  ppgraph:put({x=0,y=64},3,tex)
  ppgraph:tileInfo(
    {size={width=64,height=64}})
  ppgraph:put(32,0,4,tex)
end

:pos()
:locate()

描画位置を指定します。

引数を省略すると設定値を返します。pos()とlocate()は同じ動作をします。

ppgraph:pos(x,y)
ppgraph:locate(x,y)
ppgraph:pos({x,y})
ppgraph:locate({x,y})
ppgraph:pos(position)
ppgraph:locate(position)
x : number

X座標

y : number

Y座標

position : point object

表示位置

function start()
  ppgraph:pos(100,100)
  ppgraph:print("HELLO1")
  ppgraph:pos({100,116})
  ppgraph:print("HELLO2")
  ppgraph:pos({x=100,y=132})
  ppgraph:print("HELLO3")
end

:move()

描画位置を移動させます。

ppgraph:move(x,y)
ppgraph:move({x,y})
ppgraph:move(position)
x : number

X座標

y : number

Y座標

position : point object

表示位置

function start()
  ppgraph:pos(100,100)
  ppgraph:print("HELLO1")
  --move to down 16 pixel
  ppgraph:move(0,16)
  ppgraph:print("HELLO2")
  --move to down 16 pixel
  ppgraph:move(0,16)
  ppgraph:print("HELLO3")
end

:print()

文字列を描画します。

ビットマップフォントでは英数、ひらがな、カタカナのみです。

ppgraph:print(string,[color])
string : string

表示する文字列

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

:color()

文字やキャラクタの描画色を指定します。

引数を省略すると設定値を返します。

ppgraph:color(color)
color=ppgraph:color()
[color] : color object/optional

描画色

:scale()

文字やキャラクタの描画時のスケール(拡大、縮小率)を変更します。

引数を省略すると設定値を返します。

ppgraph:scale(x,y)
ppgraph:scale({x,y})
ppgraph:scale(scale)
scale = ppgraph:scale()
x : number

X方向拡大率

y : number

Y方向拡大率

scale : point object

拡大率

:flip()

垂直水平反転、90度回転の指定を行います。

引数を省略すると設定値を返します。

ppgraph:flip(hflip,vflip,rot90)
hflip,vflip,rot90 = ppgraph:flip()
hflip : boolean

水平方向の反転を有効にするかどうか

  • true 反転する
  • false 反転しない
vflip : boolean

垂直方向の反転を有効にするかどうか

  • true 反転する
  • false 反転しない
rot90 : number

90度単位の回転 0〜3 反時計回り

pptex:default(
  pptex:load("characters.png"))
function start()
  ppgraph:flip(false,false,0)
  ppgraph:put(32,32,1)
  ppgraph:flip(true,false,1)
  ppgraph:put(66,32,1)
  ppgraph:flip(false,true,2)
  ppgraph:put(100,32,1)
  ppgraph:flip(true,true,3)
  ppgraph:put(134,32,1)
end

:rotate()

文字やキャラクタの描画時の回転値を変更します。

引数を省略すると設定値を返します。単位はラジアンです。

ppgraph:rotate(r)
r = ppgraph:rotate()
r : number

回転度 ラジアン

:alpha()

文字やキャラクタの描画時の透明度を変更します。

引数を省略すると設定値を返します。

ppgraph:alpha(a)
a = ppgraph:alpha()
a : number

透明度 0 〜 255

:fill()

塗りつぶしの四角を描画します。

ppgraph:fill(x,y,width,height,[color])
ppgraph:fill({x,y,width,height},[color])
ppgraph:fill(rectangle,[color])
x : number

X座標

y : number

Y座標

width : number

横幅

height : number

高さ

rectangle : rectangle object

矩形位置

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

:box()

中抜きの四角を描画します。

ppgraph:box(x,y,width,height,[color])
ppgraph:box({x,y,width,height},[color])
ppgraph:box(rectangle,[color])
x : number

X座標

y : number

Y座標

width : number

横幅

height : number

高さ

rectangle : rectangle object

矩形位置

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

:line()

線を描画します。

ppgraph:line(x1,y1,x2,y2,[color])
ppgraph:line({x1,y1},{x2,y2},[color])
ppgraph:line(pos1,pos2,[color])
x1 : number

始点X座標

y1 : number

始点Y座標

x2 : number

終点X座標

y2 : number

終点Y座標

pos1 : point object

始点

pos2 : point object

終点

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

:circle()

円や楕円を描画します。

ppgraph:circle(x,y, radius, [color], [start], [end])
ppgraph:circle({x,y}, radius, [color], [start], [end])
ppgraph:circle(center, radius, [color], [start], [end])
ppgraph:circle(x,y, rx,ry, [color], [start], [end])
ppgraph:circle({x,y}, {rx,ry}, [color], [start], [end])
ppgraph:circle(center, oval_radius, [color], [start], [end])
x,y : number

中心座標

center : point object

中心座標

radius : number

半径

oval_radius : point object

楕円の半径

[color] : color object/optional

[start] : number/optional

開始角度 ラジアン

[end] : number/optional

終了角度 ラジアン

g=ppgraph

function start()
 local r
 for r=160,10,-10 do
  local c={
    math.random(0,255),
    math.random(0,255),
    math.random(0,255),
    255
  }
  g:circle(160,200,r,c)
 end
end

:triangleFan()

多角形を描画します。

ppgraph:triangleFan(x1, y1, x2, y2, ..., [color])
ppgraph:triangleFan({x1, y1, x2, y2, ...}, [color])
ppgraph:triangleFan({{x1, y1}, {x2, y2}, ...}, [color])
ppgraph:triangleFan(p1, p2, p3, ..., [color])
ppgraph:triangleFan({p1, p2, p3, ...}, [color])
x1,y1,x2,y2,... : number

頂点の座標

p1,p2,p3,... : point object

頂点の座標

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

g=ppgraph
sin=math.sin
cos=math.cos
pi=math.pi
c=pppoint(160,200)

function start()
 local r=100
 local p={}
 for q=0,360,30 do
  p[#p+1] = {
    sin(q*pi/180)*r+c.x,
    cos(q*pi/180)*r+c.y,
  }
 end
 g:triangleFan(p,g.green)
end

:triangleStrip()

多角形を描画します。

ppgraph:triangleStrip(x1, y1, x2, y2, ..., [color])
ppgraph:triangleStrip({x1, y1, x2, y2, ...}, [color])
ppgraph:triangleStrip({{x1, y1}, {x2, y2}, ...}, [color])
ppgraph:triangleStrip(p1, p2, p3, ..., [color])
ppgraph:triangleStrip({p1, p2, p3, ...}, [color])
x1,y1,x2,y2,... : number

頂点の座標

p1,p2,p3,... : point object

頂点の座標

[color] : color object/optional

描画色、省略した場合はppgraph:color()で指定した色で描画します。

:layout()

レイアウトされた座標を計算します。

pos=ppgraph:layout(x,y, width,height, centerx,centery, [area])
pos=ppgraph:layout({x,y, width,height}, centerx,centery, [area])
pos=ppgraph:layout(rectangle, centerx,centery, [area])
x : number

X方向移動量

y : number

Y方向移動量

width : number

横幅

height : number

高さ

centerx : boolean

横方向のセンタリングを有効にするかどうか

  • true 有効
  • false 無効
centery : boolean

縦方向のセンタリングを有効にするかどうか

  • true 有効
  • false 無効
[area] : rectangle object

配置するエリア、省略するとスクリーンエリアが適用されます。

pos : point object

計算された座標

img="characters.png"
function start()
  local p = ppgraph:layout(
    {x=0,y=0,
     width=32,height=32},
    true,true)
  ppgraph:put(p,1,img)
end
img="characters.png"
function start()
  local p = ppgraph:layout(
    {x=-1,y=0,
     width=32,height=32},
    false,true)
  ppgraph:put(p,1,img)
end
img="characters.png"
function start()
  local p = ppgraph:layout(
    {x=-33,y=-33,
     width=32,height=32},
    false,false)
  ppgraph:put(p,1,img)
end
img="characters.png"
function start()
  local area = {0,0,100,100}
  local p = ppgraph:layout(
    {x=-17,y=-17,
     width=32,height=32},
    false,false,area)
  ppgraph:fill(area,
    ppgraph.lightgray)
  ppgraph:put(p,1,img)
end

:update()

ゲームループを抜けて描画処理を行います。

ppgraph:update()
function start()
  for i=0,60 do
    ppgraph:print(
      "SCREEN 1")
    ppgraph:update()
  end
  for i=0,60 do
    ppgraph:print(
      "SCREEN 2")
    ppgraph:update()
  end
end

:pivot()

回転や拡大縮小の中心位置を指定します。

引数を省略すると設定値を返します。

ppgraph:pivot(x,y)
ppgraph:pivot({x,y})
ppgraph:pivot(pivot)
pivot = ppgraph:pivot()
x : number

X座標

y : number

Y座標

pivot : point object

中心座標

:lineWrap()

文字列が画面外に出た場合に折り返すかどうかを指定します。

ppgraph:lineWrap(flag)
flag = ppgraph:lineWrap()
flag : boolean

折り返すかどうか

  • true 折り返す
  • false 折り返さない

:append()

ディスプレイオブジェクトを描画リストに登録します。

ディスプレイオブジェクトはdraw()メソッドを実装したテーブルです。ゲームループを抜ける度に登録されたディスプレイオブジェクトのdraw()メソッドが実行されます。

ppgraph:append(display_object)
display_object : object

ディスプレイオブジェクト。ディスプレイオブジェクトはdraw()メソッドを持つ必要があります。

display_object={
  draw=function(self)
    -- draw
  end
}
sp = ppsprite.new()
sp:texture("characters.png")
sp:tile(1)
ppgraph:append(sp)

local t=0

function show()
  t=t+1
  if t > 60 then 
    ppgraph:remove(sp)
    ppgame:start(hide)
    t=0
  end
end

function hide()
  t=t+1
  if t > 60 then 
    ppgraph:append(sp)
    ppgame:start(show)
    t=0
  end
end

ppgame:start(show)

:remove()

ディスプレイオブジェクトを描画リストから取り除きます。

ppgraph:remove(display_object)
display_object : object

ディスプレイオブジェクト。ディスプレイオブジェクトはdraw()メソッドを持つ必要があります。

display_object={
  draw=function(self)
    -- draw something
  end
}

:tileRect()

タイルのテクスチャ座標位置を計算します。

rect = ppgraph:tileRect(tile,[texture])
tile : number

タイル番号

[texture] : texture object

タイル位置を計算するテクスチャ、省略するとデフォルトテクスチャが適用されます。

rect : rectangle object

タイルの位置

pptex:default(
  pptex:load("characters.png"))
r02=ppgraph:tileRect(2)
r35=ppgraph:tileRect(35)
function start()
  ppgraph:print(
    r02.x..","..r02.y..","..
    r02.width..","..r02.height)
  ppgraph:move(0,16)
  ppgraph:print(
    r35.x..","..r35.y..","..
    r35.width..","..r35.height)
end

:stretch()

タイルをrect位置に引き伸ばして表示します。

edgeで引き伸ばす範囲を指定できます。

ppgraph:stretch( {x,y,width,height},tile, [edge],[texture])
ppgraph:stretch( rect,tile, [edge],[texture])
x : number

X座標

y : number

Y座標

width : number

横幅

height : number

高さ

rect : rectangle object

引き伸ばして描画する位置

tile : number

タイル番号

[edge] : number

引き伸ばす範囲

[texture] : textire object

テクスチャ、省略するとデフォルトテクスチャが適用されます。

pptex:default(
  pptex:load("characters.png"))
function start()
  ppgraph:stretch(
    {64,32,128,64},3)
  ppgraph:stretch(
    pprect(64,116,128,32),3)
  ppgraph:stretch(
    pprect(64,168,128,64),3,8)
end

.white
.red
.green
.blue
.yellow
.cyan
.magenta
.black
.gray
.lightgray
.orange
.skin
.darkgreen
.lightgreen
.brown

あらかじめ定義されている15色のカラーオブジェクトです。

次のように定義されています。

ppgraph.white={r=255,g=255,b=255}
ppgraph.red={r=255,g=0,b=0}
ppgraph.green={r=0,g=255,b=0}
ppgraph.blue={r=0,g=0,b=255}
ppgraph.yellow={r=255,g=255,b=0}
ppgraph.cyan={r=0,g=255,b=255}
ppgraph.magenta={r=255,g=0,b=255}
ppgraph.black={r=0,g=0,b=0}
ppgraph.gray={r=96,g=96,b=96}
ppgraph.lightgray={r=188,g=188,b=188}
ppgraph.orange={r=255,g=128,b=0}
ppgraph.skin={r=255,g=216,b=160}
ppgraph.darkgreen={r=56,g=104,b=0}
ppgraph.lightgreen={r=152,g=232,b=0}
ppgraph.brown={r=120,g=64,b=0}
g=ppgraph
function start()
 g:pos(0,0)
 g:print("WHITE",g.white)
 g:move(0,16)
 g:print("RED",g.red)
 g:move(0,16)
 g:print("GREEN",g.green)
 g:move(0,16)
 g:print("BLUE",g.blue)
 g:move(0,16)
 g:print("YELLOW",g.yellow)
 g:move(0,16)
 g:print("CYAN",g.cyan)
 g:move(0,16)
 g:print("MAGENTA",g.magenta)
 g:move(0,16)
 g:print("BLACK",g.black)
 g:move(0,16)
 g:print("GRAY",g.gray)
 g:move(0,16)
 g:print("LIGHTGRAY", g.lightgray)
 g:move(0,16)
 g:print("ORANGE",g.orange)
 g:move(0,16)
 g:print("SKIN",g.skin)
 g:move(0,16)
 g:print("DARKGREEN", g.darkgreen)
 g:move(0,16)
 g:print("LIGHTGREEN",
   g.lightgreen)
 g:move(0,16)
 g:print("BROWN",g.brown)
end