spr
печать спрайта
spr (id, x, y, [alpha_color=-1, [scale=1, [flip=0, [rotate=0, [cell_width=1, cell_height=1]]]]]
)
Параметры:id
- индекс спрайта (0-511)
x
- координата по оси x, по которой будет отрисован спрайт, начало координат левый-верхний угол экранаy
- координата по оси y, по которой будет отрисован спрайт, начало координат левый-верхний угол экранаalpha_color
- индекс цвета, который будет прозрачным. Используйте -1
для отсутствия прозрачных пикселей, также может быть массивом с индексами прозрачных цветовscale
- масштаб, который будет применен к спрайтуflip
- отражение спрайта по вертикальной/горизонтальной оси, либо по обеим осям сразуrotate
- поворот спрайта на 0, 90, 180 или 270 градусовcell_width
- ширина, измеряется в ячейкахcell_height
- высота, измеряется в ячейках
Описание:
Выводит на экран спрайт по указанному индексу в определенные координаты.
Вы можете выбрать цвет из палитры, который будет прозрачным. Используйте -1
для отсутствия прозрачных пикселей
Спрайт может быть отмасштабирован по указанному коэффициенту. Например, при масштабе равном 2
, спрайт 8x8 будет выведен на экран размером 16x16 пикселей.
Вы можете отразить спрайт передавая параметр flip
:0
- нет отражения1
- отражение относительно вертикальной оси2
- отражение относительно горизонтальной оси3
- отражение по обеим осям сразу
Когда вы поворачиваете спрайт, передавая параметр rotate
, он поворачивается с шагом в 90° по часовой стрелке:0
- нет поворота1
- поворот на 90°2
- поворот на 180°3
- поворот на 270°
Пример:
Запустить или скачать картридж примера.
-- title: spr demo
-- author:
-- desc:
-- script: lua
-- input: gamepad
--Build sprite from text
data="010000000160010015240160170170170170170175170166250255170170170175106170170170170170051051051051"
for i=0,31 do
poke(0x4000+32+i,
tonumber(string.sub(data,i*3+1,i*3+3)))
end
p={
x={val=100,min=0,max=240},
y={val=68,min=0,max=136},
colorkey={val=0,min=-1,max=15},
scale={val=1,min=0,max=256},
flip={val=0,min=0,max=3},
rotate={val=0,min=0,max=3},
}
sel=next(p,nil)
function TIC()
--Keys
if btnp(0,30,6) then
for n=0,4 do
sel=next(p,sel) or next(p,nil)
end
end
if btnp(1,30,6) then
sel=next(p,sel) or next(p,nil)
end
if btnp(2,30,6) then
p[sel].val=p[sel].val-1
end
if btnp(3,30,6) then
p[sel].val=p[sel].val+1
end
--Clamp
if p[sel].val>p[sel].max then
p[sel].val=p[sel].max
end
if p[sel].val<p[sel].min then
p[sel].val=p[sel].min
end
cls(0)
print("Use up/down to select parameter",0,0)
print("left/right to change its value:",0,10)
--Build menu with cursor
r=0
for k,v in pairs(p) do
cur=(k==sel) and '>' or ' '
print(cur..k..':'..v.val,0,30+10*r)
r=r+1
end
--Draw Sprite
spr(1,
p.x.val,
p.y.val,
p.colorkey.val,
p.scale.val,
p.flip.val,
p.rotate.val)
end
Запустить или скачать картридж примера.
-- title: spr demo
-- author:
-- desc:
-- script: moon
-- input: gamepad
--Build sprite from text
data="010000000160010015240160170170170170170175170166250255170170170175106170170170170170051051051051"
for i=0,31
poke 0x4000+32+i, data\sub(i*3+1,i*3+3)
p={
x:{val:100,min:0,max:240}
y:{val:68,min:0,max:136}
colorkey:{val:0,min:-1,max:15}
scale:{val:1,min:0,max:256}
flip:{val:0,min:0,max:3}
rotate:{val:0,min:0,max:3}
}
sel=next(p,nil)
export TIC=->
--Keys
if btnp 0,30,6
for n=0,4 do sel=next(p,sel) or next(p,nil)
if btnp 1,30,6 then sel=next(p,sel) or next(p,nil)
if btnp 2,30,6 then p[sel].val=p[sel].val-1
if btnp 3,30,6 then p[sel].val=p[sel].val+1
--Clamp
if p[sel].val>p[sel].max then p[sel].val=p[sel].max
if p[sel].val<p[sel].min then p[sel].val=p[sel].min
cls 0
print "Use up/down to select parameter",0,0
print "left/right to change its value:",0,10
--Build menu with cursor
r=0
for k,v in pairs(p)
cur=(k==sel) and '>' or ' '
print cur..k..':'..v.val,0,30+10*r
r+=1
--Draw Sprite
spr(1,
p.x.val,
p.y.val,
p.colorkey.val,
p.scale.val,
p.flip.val,
p.rotate.val)
// title: spr demo / lua
// author: Filippo
// desc: shows how to use 'spr'
// script: js
// input: gamepad
//Build sprite from text
data = "010000000160010015240160170170170170170175170166250255170170170175106170170170170170051051051051"
for (var i = 0; i < 32; ++i) {
poke(0xf4000 + 32 + i,
parseInt(data.slice(i * 3 + 1, i * 3 + 3)))
}
var p = {
x: { val: 100, min: 0, max: 240 },
y: { val: 68, min: 0, max: 136 },
colorkey: { val: 0, min: -1, max: 15 },
scale: { val: 1, min: 0, max: 256 },
flip: { val: 0, min: 0, max: 3 },
rotate: { val: 0, min: 0, max: 3 }
}
function next(o, i) {
var ks = Object.keys(o)
if (i == undefined || i == null)
return ks[0];
var i = ks.indexOf(i) + 1
return i > ks.length ? "" : ks[i]
}
var sel = next(p, null)
function TIC() {
//Keys
if (btnp(0, 30, 6)) {
for (var n = 0; n < 5; ++n)
sel = next(p, sel) || next(p, null)
}
if (btnp(1, 30, 6)) {
sel = next(p, sel) || next(p, null)
}
if (btnp(2, 30, 6)) {
p[sel].val = p[sel].val - 1
}
if (btnp(3, 30, 6)) {
p[sel].val = p[sel].val + 1
}
//Clamp
if (p[sel].val > p[sel].max) {
p[sel].val = p[sel].max
}
if (p[sel].val < p[sel].min) {
p[sel].val = p[sel].min
}
cls(0)
print("Use up/down to select parameter", 0, 0)
print("left/right to change its value:", 0, 10)
//Build menu with cursor
var r = 0
for (var k in p) {
var v = p[k]
cur = (k == sel) ? ">" : " "
print(cur + k + ":" + v.val, 0, 30 + 10 * r)
r = r + 1
}
//Draw Sprite
spr(1,
p.x.val,
p.y.val,
p.colorkey.val,
p.scale.val,
p.flip.val,
p.rotate.val)
}