builder icon indicating copy to clipboard operation
builder copied to clipboard

Undo / Redo

Open nighca opened this issue 1 year ago • 0 comments

用户在编辑器中对当前项目 游戏内容 的修改(后面记为“操作”)可以被撤销或重做(undo/redo)

定义

  • 操作:用户对项目游戏内容进行的修改,其粒度与具体的业务场景相关;如:

    • “重命名 sprite”包括的修改为:修改这个 sprite 的名字
    • “从素材库添加 backdrop”包括的修改为:添加一个或多个 backdrop,并将被添加的第一个 backdrop 指定为默认 backdrop(为了方便继续操作帮用户选中新增项)
    • “编辑音频内容”包括的修改为:点击“保存”按钮时所有提交的变更,如按指定范围裁剪 & 调整音量

    一次操作包括的所有修改总是被一起撤销或重做

    需要注意,一些局部的(但还未生效的)输入,不可以通过全局入口进行 undo/redo,这样的输入包括但不限于:

    • sprite/sound/backdrop/costume 重命名对话框中(还没有点击“确认”提交时)input 内部的修改
    • 音频内容编辑器中点击“保存”按钮前的修改
  • undo:撤销最近一次操作,将游戏内容恢复到该操作前的状态

  • redo:再次执行最近被撤销的操作,将游戏内容变更为该操作后的状态

交互相关逻辑

  • undo/redo 入口是全局的,视觉上被放置在全局(如顶部导航栏)的位置

  • 初始状态下不可 undo 或 redo

  • 用户进行一次或多次操作后,可以进行 undo,且 undo 的入口让用户知道会被 undo 的是哪个操作

  • 用户进行一次或多次 undo 后,可以进行 redo,且 redo 的入口让用户知道会被 redo 的是哪个操作

    这些被 undo 且可按顺序 redo 的操作记为“当前状态后的操作”

  • 在某一个状态下进行普通的操作,会使得“该状态后的所有操作”丢失;即,在可 redo 状态下进行了某操作,那么将不再可 redo

  • 刷新页面或打开一个项目都会使状态回到初始状态

其他细节

  • 对同一份代码连续的多次编辑应当被合并为一次操作(虽然每次编辑完都会几乎立刻生效)
  • 进行云端保存后产生的操作,如果都被撤销,此时应当视作没有未保存的变更(离开当前项目时不会弹框提醒,详见 #393 )

nighca avatar May 21 '24 07:05 nighca