今天来玩玩新的 CC: Tweaked 方块:Printer
跟 Disk Drive 一样,放置在电脑旁边即可自动接上电脑。
这是印表机的使用画面,左边放置墨水,也就是麦块里面的各色「染料」,不过一次只能选择一种颜色的染料。
右上方放置 CC: Tweaked Printed Page 也就是印表纸
列印的输出则会自动放到第二排
但是印表纸无法自动堆叠,所以连续列印的话,一次最多六页
那麽,要怎麽开始列印呢?
当我们把印表机接上电脑後,在使用 edit.lua 编辑档案时,按下 Ctrl,除了原本的「Save」、「Exit」之外,还可以看到多一个「Print」选项,点了之後就会开始将档案内容印到纸张上。档案内容如果太多,则会自动印成多张纸。
这时候如果缺墨水或是缺纸,都会有提示讯息。
把列印成功後的纸张拿下来一看,会长这个样子,至於内容当然就是看你档案了
这真是太神奇了,在麦块里面开机、写 Code、看大萤幕、还可以把 Code 印出来保存!
但是如果你要印的页面很多,这样就会很占物品栏空间,所以 CC: Tweaked 还提供将多张纸綑在一起的方式,如下图,将列印後的纸再加上一条线,就变成了「Printed Pages」
把 Printed Pages 使用拿起来看时,可以按左右方向键来阅读上下页
CC: Tweaked 甚至还提供将一綑纸张再次包装成书的方式,如下图。使用书的方式一样透过左右键,跟 Printed Pages 没什麽不同,差别似乎只是更有仪式感 XD ?
这是阅读一本书的画面
碍於这款印表机的设计,如果要连续列印,只能选择单一颜色染料
如果想要印出多个颜色,就需要手动操作,步骤如下:
这样就可以变相的印出多色纸张,这部分有兴趣可自行尝试,我就不 demo 了
其实印表机如果可以提供填充墨水的 API,会方便很多啊!
以下是透过 Printer API 自己撰写的片段,可以看到要列印纸张其实还满容易的!
printer = peripheral.wrap('back')
if (printer.getInkLevel() > 0 and printer.getPaperLevel() > 0) then -- 检查墨水和纸张
if (printer.newPage()) then -- 准备列印新的一页,这时候还是会再次检查纸张
print(printer.getPageSize()) -- 示范如何取得纸张大小
printer.setPageTitle("ironman") -- 设定页面标题
printer.write(2021) -- 要列印的内容
printer.endPage() -- 结束这张纸的列印
end
end
edit.lua #84
这个是在档案编辑後按下 Ctrl 按钮,会判断电脑是否有接印表机,有的话就出现「Print」选项
此时不会检查印表机墨水和纸张
if peripheral.find("printer") then
table.insert(tMenuItems, "Print")
end
edit.lua #337
这一大段是使用者按下「Print」後的操作
Print = function()
local printer = peripheral.find("printer") -- 再次检查印表机是否 ready
if not printer then
sStatus = "No printer attached"
return
end
local nPage = 0 -- 总共列印的页面数
local sName = fs.getName(sPath)
if printer.getInkLevel() < 1 then -- 检查印表机墨水
sStatus = "Printer out of ink"
return
elseif printer.getPaperLevel() < 1 then -- 检查印表机纸张
sStatus = "Printer out of paper"
return
end
local screenTerminal = term.current()
local printerTerminal = {
getCursorPos = printer.getCursorPos,
setCursorPos = printer.setCursorPos,
getSize = printer.getPageSize,
write = printer.write,
}
printerTerminal.scroll = function()
if nPage == 1 then
printer.setPageTitle(sName .. " (page " .. nPage .. ")")
end
while not printer.newPage() do
if printer.getInkLevel() < 1 then
sStatus = "Printer out of ink, please refill"
elseif printer.getPaperLevel() < 1 then
sStatus = "Printer out of paper, please refill"
else
sStatus = "Printer output tray full, please empty"
end
term.redirect(screenTerminal)
redrawMenu() -- 每次要改变萤幕讯息时,都要重新绘制 Menu button,但原理我没看懂 @@
term.redirect(printerTerminal)
sleep(0.5)
end
nPage = nPage + 1
if nPage == 1 then
printer.setPageTitle(sName)
else
printer.setPageTitle(sName .. " (page " .. nPage .. ")")
end
end
bMenu = false
term.redirect(printerTerminal) -- terminal 导向印表机,开始列印
local ok, error = pcall(function()
term.scroll()
for _, sLine in ipairs(tLines) do
print(sLine)
end
end)
term.redirect(screenTerminal) -- terminal 导回电脑萤幕
if not ok then
print(error)
end
while not printer.endPage() do -- 印表机的输出空位满了,这时候将输出的纸张拿起来後,会继续自动列印
sStatus = "Printer output tray full, please empty"
redrawMenu()
sleep(0.5)
end
bMenu = true
if nPage > 1 then
sStatus = "Printed " .. nPage .. " Pages"
else
sStatus = "Printed 1 Page"
end
redrawMenu()
end,
CC: Tweaked 印表机的分享就到这里
目前为止,我们已经有 Disk Drive、Speaker、Printer、Monitor 等电脑周边
而且和电脑介接的方式都完全一致,只有六个方位可以放置
那如果我们真的需要多个磁碟机、印表机
甚至我就是想要双萤幕、三萤幕来写 Code 呢 ...
下一回我来试着让这个愿望成真吧!
<<: 剪裁与遮罩-30天学会HTML+CSS,制作精美网站
让 Angular 元件显示在画面上 上一篇,我们建立了一个元件 page1。 接下来,我们就要把 ...
在上一篇文章中,我们介绍作者如何分析MLB赛事,并找出影响比赛胜负较为重要的因子,而今天我们就来看看...
Dao物件的提取 Dao类的物件用来访问DB,我们可以把其中常用的、重复性的代码抽取出来。 新建抽象...
最近...有放下手边的事物,好好跟眼前的人吃顿饭吗? 你都跟谁一起吃饭? 跟家人? 跟朋友? 跟同学...
在制作表格之前,要先来了解表格的HTML标签 表格必备HTML标签 要制作一个基本的表格,一定会使用...