查看该GetEchoString功能,它会在每次击字符时执行以下操作(据我所知,如何管理显示):
- 如果是
Ctrl-C, Enter, 或Return: 退出;
- 如果是
Backspace,则发出命令以与背景相同的颜色重新绘制先前的完整字符串(提示+用户输入)以将其擦除;然后从存储的完整字符串中删除最后一个字符;
- 否则将字符附加到存储的完整字符串。
然后发出命令以指定颜色绘制生成的更新后的完整字符串,最后按照前面的命令更新屏幕,并带有选项dontclearset(1增量绘图,参见Screen('Flip', windowPtr, 0, 1)调用)。
要添加包装功能,我们可以修改GetEchoString如下:
- 击中时注释掉重新绘制命令
Backspace,只需更新存储的字符串(见下文);
WrapString在更新的字符串上添加一个调用来包装它;
- 用于
DrawFormattedText发出命令以显示包装后的字符串;
- 最后,调用
Screen('Flip', windowPtr)将屏幕更新dontclearset为0(默认)。
该功能的相关部分现在是:
% adapted from PTB3 GetEchoString
while true
if useKbCheck
char = GetKbChar(varargin{:});
else
char = GetChar;
end
if isempty(char)
string = '';
break;
end
switch (abs(char))
case {13, 3, 10}
% ctrl-C, enter, or return
break;
case 8
% backspace
if ~isempty(string)
% Remove last character from string:
string = string(1:length(string)-1);
end
otherwise
string = [string, char];
end
output = [msg, ' ', string];
output=WrapString(output,maxNumChar);
DrawFormattedText(windowPtr,output,x,y,textColor,[],0,0,vLineSpacing);
Screen('Flip',windowPtr);
end
根据您的需要定义在哪里maxNumChar和将要定义。vLineSpacing
这将处理文本的水平换行,同时保持Backspace功能正常工作。但是请注意,如果整个屏幕都被填满,您仍然可以垂直溢出。