查看该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
功能正常工作。但是请注意,如果整个屏幕都被填满,您仍然可以垂直溢出。