骑马与砍杀中文站论坛

用户名  找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

帖子
购买CDKEY 衣谷三国
查看: 1449|回复: 14

[求助] presentation里tableau material怎么用?

[复制链接]

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
发表于 2025-1-13 16:08:21 | 显示全部楼层 |阅读模式
本帖最后由 AntiN0m1 于 2025-1-24 10:13 编辑

我参照领军者里给npc换装的界面,正在制作一个功能略有不同的界面。左边是你的物品栏,可以给每个物品栏单独上锁,中间是npc装备,右边是一些选项与说明。
mb7 (中).png

换装备的时候与领军者类似,都是左键拖拽交换物品,右键快速装备物品,不同的是我的右键可以快速卸下装备以及取消选择物品。这些操作本质上都是交换两个slot中的物品。

领军者里每换一次物品都会重新启动presentation,重新生成物品的图形,而我不想这么做,因为我的物品栏是用的带滚动条的container,每重启一次滚动条都会归位,换物品很不丝滑。我是直接在交换物品时也交换物品图形的位置,这样做就和游戏原本的物品界面一样丝滑了。

但这样不重启presentation就带来了我的问题。中间下面这个人物模型在换装备后是需要更换的,以下是创建的代码:
  1.       (store_mul, ":troop_with_weapons", ":selected_troop", 2),
  2.       (create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
  3.       (position_set_x, pos1, 800),
  4.       (position_set_y, pos1, 960),
  5.       (overlay_set_size, "$g_presentation_obj_admin_panel_3", pos1),
  6.       (position_set_x, pos1, 315),
  7.       (position_set_y, pos1, 20),
  8.       (overlay_set_position, "$g_presentation_obj_admin_panel_3", pos1),
复制代码


我本来想的很简单,屏蔽掉原先的再创建一个新的就行了,代码如下:
  1.             (overlay_set_display, "$g_presentation_obj_admin_panel_3", 0),
  2.             (store_mul, ":troop_with_weapons", ":selected_troop", 2),
  3.             (create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
  4.             (position_set_x, pos1, 800),
  5.             (position_set_y, pos1, 960),
  6.             (overlay_set_size, "$g_presentation_obj_admin_panel_3", pos1),
  7.             (position_set_x, pos1, 315),
  8.             (position_set_y, pos1, 20),
  9.             (overlay_set_position, "$g_presentation_obj_admin_panel_3", pos1),
复制代码


但发现这样做不行,如图:马已经去掉了, 但模型没变。
mb8 (中).png

我的问题是:
一个tableau materia好像是在第一次创建时就固定了?再次调用是不会重新生成的吗?
不重启presentation该怎么操作才能改变人物模型的装备?
还是说我的其他操作有问题?

其他相关问题:
游戏中的物品界面是怎么做到的?
像角色,物品,部队这种界面都是游戏引擎中的不公开代码的吗?如果能看到这些代码能少走不少弯路。
presentation里的overlay一旦创建了就不能删除或取代,只能用overlay_set_display屏蔽掉吗?

希望各位大佬帮我解答一下,万分感谢!


更新:可以直接看14楼的代码问题在哪。

17

主题

658

回帖

368

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2420
精华
0
互助
33
荣誉
0
贡献
0
魅力
84
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(58) 鸡蛋(0)
发表于 2025-1-15 11:18:29 | 显示全部楼层
首先第一个,创建时就固定的是overlay,你感觉tableau materia变不了是因为已经固定为某个overlay叻。
第二个,不重新restart去改变overlay的显示办法也有,click触发器,click可以解决很多 “非button类的overlay的互动”;另外还有一个比较重要好用的函数 overlay_set_additional_render_height,prsnt实际上是有Z轴的,这个函数可以调整overlay在Z轴上的高度,甚至如果说是特殊一点的不用考虑button互动的overlay,直接进行alpha的变也可以。核心思路就是要么在例如run click等其他触发器里实现,要么load的时候先备菜,到位的时候再用,看你的问题我建议直接click里面creat新的再把旧的display就行,这个我是用过的。
第三个,这些系统界面hard code你就别指望了,为数不多的几个提供了接口但是也仅支持你自己重新写新的。

鲜花鸡蛋

AntiN0m1  在2025-1-15 16:35  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
解解解解解解解解解解解解解解解解解解

17

主题

658

回帖

368

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2420
精华
0
互助
33
荣誉
0
贡献
0
魅力
84
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(58) 鸡蛋(0)
发表于 2025-1-15 11:20:25 | 显示全部楼层
另外说一点,”prsnt里的overlay一旦创建了就不能删除或取代“,类似于彻底删除的释放,那确实是不行的,至于“取代”才有很多曲线救国的办法

评分

参与人数 1第纳尔 +10 互助 +2 魅力 +10 收起 理由
幼稚园殺手 + 10 + 2 + 10 乐于助人!

查看全部评分

鲜花鸡蛋

AntiN0m1  在2025-1-15 16:36  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
解解解解解解解解解解解解解解解解解解

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 16:35:44 | 显示全部楼层
本帖最后由 AntiN0m1 于 2025-1-15 16:58 编辑
huagao 发表于 2025-1-15 11:18
首先第一个,创建时就固定的是overlay,你感觉tableau materia变不了是因为已经固定为某个overlay叻。
第二 ...

感谢花糕大佬的帮助!我入坑的时候就看了你的很多教程,非常感谢!
你说的click触发器就是ti_on_presentation_mouse_press吧,我说的左键右键交换物品及它们的overlay就是在其中完成的,在交换完物品之后就是帖子中的第二段代码overlay_set_display那些,把旧的display再creat新的,旧的还在,只是同一个变量中变成了新的,似乎和你说的没什么区别。我的上一个帖子中改变右边的物品和前缀就是这么用的,跟领军者一样。
但是用同一个tableau materia是不会变的,比如我在load时用:
(create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
现在我click之后换完了装备,display后再用相同的:
(create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
模型是不会变的,但如果我换一个tableau materia,比如加一个一模一样的新的,像这样:
(create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window_1", ":troop_with_weapons"),
模型就会换上新装备。
这是为什么?

17

主题

658

回帖

368

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2420
精华
0
互助
33
荣誉
0
贡献
0
魅力
84
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(58) 鸡蛋(0)
发表于 2025-1-15 17:10:47 | 显示全部楼层
AntiN0m1 发表于 2025-1-15 16:35
感谢花糕大佬的帮助!我入坑的时候就看了你的很多教程,非常感谢!
你说的click触发器就是ti_on_presentat ...

感觉还是传递参数的问题,我以前用trp note的tableau material,一直很顺利,并没有遇到你说的情况
解解解解解解解解解解解解解解解解解解

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 17:29:19 | 显示全部楼层
本帖最后由 AntiN0m1 于 2025-1-15 17:31 编辑
huagao 发表于 2025-1-15 17:10
感觉还是传递参数的问题,我以前用trp note的tableau material,一直很顺利,并没有遇到你说的情况 ...

有道理,game_party_window里是用cur_tableau_add_tableau_mesh了两个troop_party的tableau material,虽然看起来没毛病,我回来换个试一下

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 19:29:20 | 显示全部楼层
huagao 发表于 2025-1-15 17:10
感觉还是传递参数的问题,我以前用trp note的tableau material,一直很顺利,并没有遇到你说的情况 ...

不行,其他tableau material也是这个情况

17

主题

658

回帖

368

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2420
精华
0
互助
33
荣誉
0
贡献
0
魅力
84
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(58) 鸡蛋(0)
发表于 2025-1-15 19:36:47 来自手机 | 显示全部楼层
AntiN0m1 发表于 2025-1-15 19:29
不行,其他tableau material也是这个情况

你怎么写的,我这之前写的就正常来自: Android客户端

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 19:45:37 | 显示全部楼层
huagao 发表于 2025-1-15 19:36
你怎么写的,我这之前写的就正常

代码有点多,我要不直接把mod打包发给你?

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 19:53:48 | 显示全部楼层
huagao 发表于 2025-1-15 19:36
你怎么写的,我这之前写的就正常

我这样直接发吧

(点击展开 / 收起)

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 19:55:19 | 显示全部楼层
huagao 发表于 2025-1-15 19:36
你怎么写的,我这之前写的就正常

代码直接发了,还得审核

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 19:59:57 | 显示全部楼层
huagao 发表于 2025-1-15 19:36
你怎么写的,我这之前写的就正常

只发点左键的代码,看看用审核不

  1.     (ti_on_presentation_mouse_press,[
  2.       (store_trigger_param_1, ":object"),
  3.       (store_trigger_param_2, ":mouse_state"),
  4.       
  5.       (assign, ":selected_troop", "$g_prsnt_param_1"),
  6.       (assign, ":put_back", 1),
  7.       (troop_get_inventory_capacity, ":inv_cap", "trp_player"),
  8.       (try_for_range, ":slot_no", 0, ":inv_cap"),
  9.         (neq, ":slot_no", 9),
  10.         (troop_slot_eq, "trp_temp_array_b", ":slot_no", ":object"),
  11.         (assign, ":put_back", 0),
  12.         # (troop_slot_eq, "trp_temp_array_c", ":slot_no", 1), # can use
  13.         (try_begin),
  14.           (is_between, ":slot_no", 0, 9),
  15.           (troop_get_inventory_slot, ":cur_item", ":selected_troop", ":slot_no"),
  16.         (else_try),
  17.           (is_between, ":slot_no", 10, ":inv_cap"),
  18.           (troop_get_inventory_slot, ":cur_item", "trp_player", ":slot_no"),
  19.         (try_end),
  20.         
  21.         (try_begin),
  22.           (eq, ":mouse_state", 0), # left-click
  23.           (try_begin),
  24.             (eq, "$g_cur_selected_item_slot", -1),
  25.             (try_begin),
  26.               (gt, ":cur_item", -1),
  27.               ### object position
  28.               (try_begin),
  29.                 (ge, ":slot_no", 10),
  30.                 (troop_get_slot, ":item_x", "trp_temp_array_x", ":slot_no"),
  31.                 (troop_get_slot, ":item_y", "trp_temp_array_y", ":slot_no"),
  32.                 (position_set_x, pos5, ":item_x"),
  33.                 (position_set_y, pos5, ":item_y"),
  34.               (else_try),
  35.                 (troop_get_slot, ":cur_selected_object", "trp_temp_array_d", ":slot_no"),
  36.                 (overlay_get_position, pos5, ":cur_selected_object"),
  37.                 (troop_get_slot, ":cur_selected_slot_obj", "trp_temp_array_b", ":slot_no"),
  38.                 (overlay_set_alpha, ":cur_selected_slot_obj", 0x00),
  39.               (try_end),
  40.               ###
  41.               (assign, "$g_cur_selected_item_slot", ":slot_no"),
  42.               (close_item_details),
  43.             (try_end),
  44.           (else_try),
  45.             #(gt, "$g_cur_selected_item_slot", -1),
  46.             (this_or_next|troop_slot_eq, "trp_temp_array_c", "$g_cur_selected_item_slot", 1), ##
  47.             (is_between, ":slot_no", 10, ":inv_cap"),
  48.             (assign, ":old_slot", "$g_cur_selected_item_slot"),
  49.             (assign, ":new_slot", ":slot_no"),

  50.             ### object position change
  51.             (troop_get_slot, ":old_object", "trp_temp_array_d", ":old_slot"),
  52.             (troop_get_slot, ":can_use_old_item", "trp_temp_array_c", ":old_slot"),
  53.             (troop_get_slot, ":new_object", "trp_temp_array_d", ":new_slot"),
  54.             (troop_get_slot, ":can_use_new_item", "trp_temp_array_c", ":new_slot"),
  55.             (try_begin),
  56.               (ge, ":new_slot", 10),
  57.               (troop_get_inventory_slot, ":new_item", "trp_player", ":new_slot"),
  58.               (troop_get_slot, ":item_x", "trp_temp_array_x", ":new_slot"),
  59.               (troop_get_slot, ":item_y", "trp_temp_array_y", ":new_slot"),
  60.               (position_set_x, pos6, ":item_x"),
  61.               (position_set_y, pos6, ":item_y"),
  62.               (overlay_set_size, ":old_object", pos3),
  63.               (overlay_set_container_overlay, ":old_object", "$g_presentation_obj_admin_panel_7"),
  64.             (else_try),
  65.               (troop_get_inventory_slot, ":new_item", ":selected_troop", ":new_slot"),
  66.               (overlay_get_position, pos6, ":new_object"),
  67.               (overlay_set_size, ":old_object", pos4),
  68.               (overlay_set_container_overlay, ":old_object", -1),
  69.               (troop_get_slot, ":new_slot_obj", "trp_temp_array_b", ":new_slot"),
  70.               (overlay_set_alpha, ":new_slot_obj", 0xFF),
  71.             (try_end),
  72.             (overlay_set_position, ":old_object", pos6),
  73.             (troop_set_slot, "trp_temp_array_d", ":new_slot", ":old_object"),
  74.             (troop_set_slot, "trp_temp_array_c", ":new_slot", ":can_use_old_item"),

  75.             (try_begin), # old_object position: pos5
  76.               (ge, ":old_slot", 10),
  77.               (overlay_set_size, ":new_object", pos3),
  78.               (overlay_set_container_overlay, ":new_object", "$g_presentation_obj_admin_panel_7"),
  79.             (else_try),
  80.               (overlay_set_size, ":new_object", pos4),
  81.               (overlay_set_container_overlay, ":new_object", -1),
  82.               (troop_get_slot, ":old_slot_obj", "trp_temp_array_b", ":old_slot"),
  83.               (overlay_set_alpha, ":old_slot_obj", 0xFF),
  84.               (eq, ":new_item", -1),
  85.               (overlay_set_alpha, ":old_slot_obj", 0x00),
  86.             (try_end),
  87.             (overlay_set_position, ":new_object", pos5),
  88.             (troop_set_slot, "trp_temp_array_d", ":old_slot", ":new_object"),
  89.             (troop_set_slot, "trp_temp_array_c", ":old_slot", ":can_use_new_item"),
  90.             ###
  91.             (call_script, "script_exchange_two_items_of_slots", ":old_slot", ":new_slot", ":selected_troop"),
  92.             # (start_presentation, "prsnt_manage_inventory"),
  93.             (assign, "$g_cur_selected_item_slot", -1),

  94.             (overlay_set_display, "$g_presentation_obj_admin_panel_3", 0),
  95.             (store_mul, ":troop_with_weapons", ":selected_troop", 2),
  96.             # (create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window_1", ":selected_troop"), #test
  97.             (create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
  98.             (position_set_x, pos1, 800),
  99.             (position_set_y, pos1, 960),
  100.             (overlay_set_size, "$g_presentation_obj_admin_panel_3", pos1),
  101.             (position_set_x, pos1, 315),
  102.             (position_set_y, pos1, 20),
  103.             (overlay_set_position, "$g_presentation_obj_admin_panel_3", pos1),
  104.           (try_end),
复制代码


8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 21:26:31 | 显示全部楼层
本帖最后由 AntiN0m1 于 2025-1-19 23:17 编辑
AntiN0m1 发表于 2025-1-15 19:59
只发点左键的代码,看看用审核不

发现一个bug,但与本问题无关。需要在### object position change下加个能换的条件。

8

主题

29

回帖

21

积分

随仆

Rank: 1

UID
3713555
第纳尔
115
精华
0
互助
0
荣誉
1
贡献
0
魅力
202
注册时间
2024-11-10
鲜花(7) 鸡蛋(0)
 楼主| 发表于 2025-1-15 21:33:13 | 显示全部楼层
本帖最后由 AntiN0m1 于 2025-1-24 10:11 编辑
huagao 发表于 2025-1-15 19:36
你怎么写的,我这之前写的就正常

我写了个通用的测试prsnt,直接看这个得了,但毛病不太一样,这个点完什么都没有了,但overlay的id确实生成了。
更新:低级错误,忘了在ti_on_presentation_run里面加(set_fixed_point_multiplier, 1000),,加上之后问题就完全一样了。

  1.   ("test", 0, mesh_load_window, [
  2.     (ti_on_presentation_load, [
  3.       (presentation_set_duration, 999999),
  4.       (set_fixed_point_multiplier, 1000),

  5.       (store_mul, ":troop_with_weapons", "trp_player", 2),
  6.       (create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
  7.       (position_set_x, pos1, 800),
  8.       (position_set_y, pos1, 960),
  9.       (overlay_set_size, "$g_presentation_obj_admin_panel_3", pos1),
  10.       (position_set_x, pos1, 200),
  11.       (position_set_y, pos1, 200),
  12.       (overlay_set_position, "$g_presentation_obj_admin_panel_3", pos1),
  13.       (assign, reg0, "$g_presentation_obj_admin_panel_3"),
  14.       (display_message, "@{reg0}", 0x000000),
  15.     ]),
  16.     (ti_on_presentation_mouse_press,[
  17.       (store_trigger_param_1, ":object"),
  18.       (store_trigger_param_2, ":mouse_state"),

  19.       (eq, ":mouse_state", 0),
  20.       (eq, ":object", "$g_presentation_obj_admin_panel_3"),
  21.       (troop_get_inventory_slot, ":horse", "trp_player", 8),
  22.       (try_begin),
  23.         (eq, ":horse", -1),
  24.         (troop_set_inventory_slot, "trp_player", 8, horses_begin),
  25.       (else_try),
  26.         (troop_set_inventory_slot, "trp_player", 8, -1),
  27.       (try_end),
  28.       (overlay_set_display, "$g_presentation_obj_admin_panel_3", 0),
  29.       (store_mul, ":troop_with_weapons", "trp_player", 2),
  30.       (create_mesh_overlay_with_tableau_material, "$g_presentation_obj_admin_panel_3", -1, "tableau_game_party_window", ":troop_with_weapons"),
  31.       (position_set_x, pos1, 800),
  32.       (position_set_y, pos1, 960),
  33.       (overlay_set_size, "$g_presentation_obj_admin_panel_3", pos1),
  34.       (position_set_x, pos1, 200),
  35.       (position_set_y, pos1, 200),
  36.       (overlay_set_position, "$g_presentation_obj_admin_panel_3", pos1),
  37.       (assign, reg0, "$g_presentation_obj_admin_panel_3"),
  38.       (display_message, "@{reg0}", 0x000000),
  39.     ]),
  40.     (ti_on_presentation_run, [
  41.       (try_begin),
  42.         (key_clicked, key_escape),
  43.         (presentation_set_duration, 0),
  44.       (try_end),
  45.     ]),
  46.   ]),
复制代码



17

主题

658

回帖

368

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2420
精华
0
互助
33
荣誉
0
贡献
0
魅力
84
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(58) 鸡蛋(0)
发表于 2025-1-15 23:02:45 来自手机 | 显示全部楼层
AntiN0m1 发表于 2025-1-15 19:55
代码直接发了,还得审核

加QQ吧,1257050262,QQ还能看看录屏啥的来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-3-26 10:27 , Processed in 0.124663 second(s), 22 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表