|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
看经常有人问画廊的问题,我也研究了下,写的比较简易:
代码:
https://github.com/red-moon-tea-party/renpy/tree/main/cg_gallery/game
script.rpy
[RenPy] 纯文本查看 复制代码 ## 定义画廊里按钮的高度和宽度。
define gui.gallery_slot_height = 100
define gui.gallery_slot_width = 200
define gui.gallery_slot_cols = 3
define gui.gallery_slot_rows = 2
init python:
if persistent.unlock_1 == None:
persistent.unlock_1 = False
if persistent.unlock_2 == None:
persistent.unlock_2 = False
if persistent.unlock_3 == None:
persistent.unlock_3 = False
if persistent.unlock_4 == None:
persistent.unlock_4 = False
# 游戏在此开始。
label start:
scene beach3
"测试"
scene bigbeach1
"测试"
show beach1 mary
"测试"
menu:
"结局1":
jump b_1
"结局2":
jump b_2
"结局3":
jump b_3
"结局4":
jump b_4
return
label b_1:
$ persistent.unlock_1 = True
scene transfer
"测试"
scene moonpic
"测试"
scene girlpic
"测试"
"解锁结局1"
return
label b_2:
$ persistent.unlock_2 = True
scene p1
"unlock_2"
return
label b_3:
$ persistent.unlock_3 = True
scene p2
"unlock_3"
return
label b_4:
$ persistent.unlock_4 = True
scene p3
"unlock_4"
return
gallery handler
[RenPy] 纯文本查看 复制代码 init -99 python:
class GalleryHandler:
SLOT_PER_PAGE = 6
def __init__(self, buttons):
## 画廊处于第几页
self.index = 0
self.buttons = buttons
## 初始化画廊设置
def init_gallery(self, gallery):
for b in buttons:
gallery.button(b.name)
if b.condition:
gallery.condition(b.condition)
if b.transform:
gallery.transform(b.transform)
for cg in b.images:
gallery.unlock_image(cg)
## 拿到当前页面的画廊按钮
def get(self):
start = self.index * GalleryHandler.SLOT_PER_PAGE
end = start + GalleryHandler.SLOT_PER_PAGE
return self.buttons[start:end]
def get_total_pages(self):
return (len(self.buttons) + GalleryHandler.SLOT_PER_PAGE - 1) // GalleryHandler.SLOT_PER_PAGE
class GalleryButtonEntry:
SLOT_HEIGHT=150
SLOT_WIDTH=300
def __init__(self, name, images, condition=None,
transform=None, thumbnail=None):
## 按钮的名字
self.name = name
## 可能有一张或者多张cg
self.images = images
## 解锁条件,可以没有
self.condition = condition
## 多张图的转场效果,可以没有
self.transform = transform
## 按钮的缩略图,可以没有,会缺省用第一张图的缩略图
if thumbnail:
self.thumbnail = thumbnail
else:
self.thumbnail = im.Scale("images/{:s}.jpg".format(self.images[0]),
GalleryButtonEntry.SLOT_WIDTH,
GalleryButtonEntry.SLOT_HEIGHT)
gallery
[RenPy] 纯文本查看 复制代码 init python:
buttons = [
## 只有一张图的cg
GalleryButtonEntry(name="dawn", images=["dawn1"]),
## 多张cg,有转场效果
GalleryButtonEntry(name="dark", images=["bigbeach1",
"beach1 mary", "beach2", "beach3"], transform=slideawayleft),
## 需要unlock_1是true才会解锁
GalleryButtonEntry(name="end1",
images=["transfer", "moonpic", "girlpic"],
condition="persistent.unlock_1"),
## 需要unlock_2是true才会解锁
GalleryButtonEntry(name="end2",
images=["transfer1", "moonpic", "girlpic"],
condition="persistent.unlock_2"),
## 需要unlock_3是true才会解锁
GalleryButtonEntry(name="end3",
images=["transfer", "moonpic", "girlpic"],
condition="persistent.unlock_3"),
## 需要unlock_4是true才会解锁
GalleryButtonEntry(name="end4",
images=["transfer", "moonpic", "girlpic"],
condition="persistent.unlock_4"),
## 单一图的cg
GalleryButtonEntry(name="p1",
images=["p1"]),
GalleryButtonEntry(name="p2",
images=["p2"]),
GalleryButtonEntry(name="p3",
images=["p3"]),
GalleryButtonEntry(name="p4",
images=["p3"]),
GalleryButtonEntry(name="p5",
images=["p3"]),
GalleryButtonEntry(name="p6",
images=["p3"]),
GalleryButtonEntry(name="p7",
images=["p3"]),
GalleryButtonEntry(name="p8",
images=["p3"]),
]
## 创建Gallery对象。
g = Gallery()
## 设置没有解锁的图片
g.locked_button = Composite(
(GalleryButtonEntry.SLOT_WIDTH,
GalleryButtonEntry.SLOT_HEIGHT),
(0, 0), Solid("#000"),
(50,30), Text("未解锁", size=30, color="#fff"))
g.button("beach3")
g.unlock_image("beach3")
# 用于图像切换使用的转场(transition)。
g.transition = dissolve
gh = GalleryHandler(buttons)
gh.init_gallery(g)
# 我们使用的画廊界面。
screen gallery:
# 确保画廊界面替换主菜单。
tag menu
# 背景图。
add "gui/gallery/bg.jpg"
text _("画廊"):
size 30
color "#fff"
align (0.1, 0.1)
use gallery_slots(gh.get())
## 翻页逻辑
hbox:
xalign 0.5 yalign 0.8
frame:
textbutton _("上一页"):
sensitive gh.index > 0
action SetField(gh, 'index', gh.index-1)
for i in range(gh.get_total_pages()):
frame:
textbutton str(i):
action SetField(gh, 'index', i)
frame:
textbutton _("下一页"):
sensitive gh.index < gh.get_total_pages()-1
action SetField(gh, 'index', gh.index+1)
# 用于响应后返回主菜单的界面。
# 也能用于导航到其他画廊界面。
textbutton "Return" action Return() xalign 0.1 yalign 0.8
screen gallery_slots(buttons):
# 按钮网格(grid)。
grid gui.gallery_slot_cols gui.gallery_slot_rows:
align (0.5, 0.5)
xysize (1600, 1200)
xspacing 30
yspacing 30
for b in buttons:
frame:
foreground Frame("gui/gallery/idle.png")
xysize (GalleryButtonEntry.SLOT_WIDTH, GalleryButtonEntry.SLOT_HEIGHT)
# 调用make_button显示具体的按钮。
add g.make_button(name=b.name, unlocked=b.thumbnail,
xalign=0.5, yalign=0.5)
## 如果格子不满,需要补上空白
for i in range(gh.SLOT_PER_PAGE - len(buttons)):
null
screens
[RenPy] 纯文本查看 复制代码 textbutton _("画廊"):
text_idle_color gui.idle_color
text_hover_color gui.hover_color
action [
ShowMenu("gallery"), SetField(gh, 'index', 0)]
|
评分
-
查看全部评分
|