MATLAB App Designer入门实战(二)

为了方便汇总,这里的目录是接着第一篇来的。
系列文章目录:

注: 本文中多次提到的主动创建的控件及自动创建的控件是指:
主动创建的控件: 通过编程的方式创建的控件
自动创建的控件: 通过拖拽创建并在检查器定义初始属性的控件

入门实战第二弹——2048小游戏App

7.如何批量创建控件——控件矩阵创建

我们虽然可以通过拖拽创建多个控件,但依次为其增添属性过于麻烦。
app自动创建的各个控件其实相当于app的几个公有属性,我们很自然的想到在添加属性的位置添加一个控件矩阵,并在startupFcn为其位置、颜色等属性赋值。
2048小游戏App中我们需要批量创建的便是一个一个数字卡片(有些目前没有数字):

一共要创建4x4=16个,同时还需要适宜的编号对各个卡片进行区分,这时候我们便可以创造一个控件矩阵,并通过( i , j )这样的数对来确定修改或调用哪个控件。
我们首先在添加属性的区域添加要创建的控件矩阵名:
在这里插入图片描述
之后通过for循环批量创建控件:
在这里插入图片描述
需要注意的是,使用控件矩阵创建只能使用set对其更改属性,不能保证未来App Designer是会只允许使用点赋值,对此我想到了接下来介绍的结构体方法。

8.如何批量创建控件——通过字符串对结构体控件批量创建

依旧需要在属性创建区域添加要创建结构体控件名
startupFcn函数中,我们需要先构建含有i,j信息的字符串,例如Num12代表第一行第二列的控件。
字符串的创建方式如下:

for i=1:4
	for j=1:4
	tempStr=['Num',num2str(i),num2str(j)];
	end
end

之后便可以通过各个字符串创造出控件,创造方式如下:
在这里插入图片描述
需要注意到的是,在创建和调整时,字符串必须在括号内,我们在调用时可以有两种调用方式,举将第二行第一列控件文本改为’title’为例:
1直接调用:

app.drawSquareHdl.Num21.Text=‘title’;

2字符串调用

string=‘Num21’;
app.drawSquareHdl.(string).Text=‘title’;
或者
app.drawSquareHdl.(‘Num21’).Text=‘title’;

9.控件的层次

这里只是稍微提一句,由于在startupFcn中创造的控件是最后生成的,所以一般情况下会在所有控件最上层,因此在该程序中,为保证游戏结束界面的控件在数字卡片上面,游戏结束界面控件也写在startupFcn中,同书写位置需要在数字卡片后面,否则就会出现如下情况:

10.回调的自主创建与虚控件

我们可以通过按键轻松创造出回调,但是我们自主写在startupFcn中的控件无法增添回调,这时候我们有一个大胆的想法,即创建一个没有任何用处的控件并将其隐藏,我将其称为虚控件,然后我们便可以使我们自主创建的控件和虚控件共享一个回调函数,实现为自主创建的控件增添回调的功能。
如同所示,这里save picture按钮是自主创建的(不然无法出现在数字卡片上方)

我们为了为其增添增添回调,需要创建一个无用按钮并隐藏:

之后为虚控件创建回调:

为了让两个按钮公有一个回调,我们在**startupFcn**中写下这么一行
app.SavePicButton.ButtonPushedFcn=createCallbackFcn(app, @SavePicFcn, true)

可以注意到这样主动的回调创建方式与自动创建的回调很类似,都是通过createCallbackFcn创建的:
在这里插入图片描述
另: 多个自动创建的控件公有一个回调时,回调上方的注释会有显示:
在这里插入图片描述
但是主动创建的控件使用回调时,并不会在注释中显示:在这里插入图片描述

11.存储UIFigure为图像

这个真的是无力吐槽了,五六年前就有人提出来了这个问题,至今App designer依旧没有相应的函数,目前主流的方法有两种:
方法一:
将UIFigure中的图像、控件等物件使用figure再重画一遍,再使用figure可使用的函数存储为图片,这个过程中可以设置figure为不可见状态,但这个方法就显得有些不伦不类,明明放弃了figure而使用UIFigure,结果存储图片时却还是要用老方法。
方法二:
。。。。。。。。。。调用java中的函数进行截图,然后获得UIFigure的Position属性。。。。。。然后把需要的那部分图片使用imwrite存储起来,这个2048APP就是使用的这个方法,
代码:
(因为想把边框一并截图,所以会增减一定像素)

screensize=get(0,'screensize');
screensize=1.5*screensize;
robot=java.awt.Robot();
rectangle=java.awt.Rectangle();
rectangle.x=0;
rectangle.y=0;
rectangle.width=screensize(3);
rectangle.height=screensize(4);
image=robot.createScreenCapture(rectangle);
data=image.getData();
temp=zeros(screensize(3)*screensize(4)*3,1);
temp=data.getPixels(0,0,screensize(3),screensize(4),temp);
temp=uint8(temp);
R=temp(1:3:end);
G=temp(2:3:end);
B=temp(3:3:end);
R=reshape(R,[screensize(3),screensize(4)]);
G=reshape(G,[screensize(3),screensize(4)]);
B=reshape(B,[screensize(3),screensize(4)]);
R=R';
G=G';
B=B';
ima=cat(3,R,G,B);
tempPos=app.Game2048AppbyslandarerUIFigure.Position;
xp=tempPos(1);yp=tempPos(2);xl=tempPos(3);yl=tempPos(4);
tempIma=ima(round(yp.*1.5+20):round((yp+yl).*1.5+80),round(xp.*1.5-15):round((xp+xl).*1.5+15),:);
[filename, pathname] = uiputfile({'*.jpg;*.png','All Image Files';...
    '*.jpg','JPG';'*.png','PNG' });
imwrite(tempIma,[pathname,filename]);
12.控件的无法选中状态

这里也是想稍微提一句,控件的无法选中状态(Enable)可以使控件整体的透明度降低,可以用来制作游戏结束的界面:

此外如果想要制造这样的界面需要保证各某些控件之间没有重叠的部分,否则便会出现下图的情况:
在这里插入图片描述


相信认真看完这篇文章的你已经有了还原该mlapp文件的能力,在这里提供m版和mlapp版的连接:
MATLAB 2048小游戏m文件链接:matlab 2048小游戏
MATLAB 2048小游戏mlapp文件链接:Game2048App.mlapp

  • 13
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Matlab App DesignerMatlab的一个应用程序设计工具,它可以帮助用户快速创建交互式应用程序。如果想要学习Matlab App Designer,可以从以下几个方面入手: 1. 学习Matlab基础知识,包括Matlab语言、Matlab编程环境、Matlab图形界面等。 2. 学习Matlab App Designer的基本概念和使用方法,包括创建应用程序、添加组件、设置属性、编写回调函数等。 3. 学习Matlab App Designer的高级应用,包括使用Matlab App Designer进行数据分析、图像处理、机器学习等。 4. 实践应用程序设计,尝试使用Matlab App Designer创建自己的应用程序,不断提高自己的编程能力和应用水平。 总之,学习Matlab App Designer需要不断实践和探索,只有不断积累经验和知识,才能掌握这个工具的使用技巧。 ### 回答2: Matlab App DesignerMatlab中的一个工具箱,旨在帮助Matlab用户通过可视化方式快速创建自定义图形界面(GUI)。它提供了丰富的图形控件、交互式设计、布局和数据控件等功能,并且能够与Matlab的核心计算引擎无缝集成,使用户的GUI能够自动处理数据输入、计算和输出等环节。下面将从入门到实践的步骤展开介绍。 入门篇: 1. 安装MatlabApp Designer:在Matlab的网站上下载一个Matlab版本,安装后再安装App Designer,这个过程比较简单。 2. 了解App Designer的界面:App Designer的界面类似于其他的GUI设计软件,主要分为视图(View)和代码(Code)两个部分。 3. 创建一个简单的GUI:可以尝试使用App Designer设计器创建一个简单的GUI,可以包括文本框、按钮、菜单栏等控件。 进阶篇: 1. 掌握控件的使用:App Designer提供了很多控件,包括文本框、编辑框、列表框、按钮等等,用户需要学会如何使用这些控件。 2. 学习数据控件:Matlab的数据处理能力是其一大特点,用户可以通过学习数据控件的使用方式来实现更多功能。 3. 学习App Designer代码编写:App Designer不仅提供了可视化设计界面,还可以通过代码的方式来控制控件和数据的处理过程。 实践篇: 1. 自主开发一个实际应用程序:可以根据自己的需求,在App Designer中创建一个实际应用程序。 2. 优化程序代码:根据实际的使用过程,不断优化代码,提高程序的性能和可用性。 3. 分享程序:将编写的程序分享给其他人使用,也可以通过分享过程中的反馈不断改善程序。 通过以上步骤,可以学习到如何使用App Designer这个Matlab工具箱,并实现一个实际应用程序,从而提高Matlab的应用效率。 ### 回答3: 首先,Matlab app designer是一种可视化设计工具,可以快速创建基于MATLAB的应用程序。通过使用这个工具,你可以轻松地设计用户界面,并添加各种功能控件,例如按钮、文本框、下拉菜单、拖动条等。同时,你还可以使用Matlab代码连接这些控件,从而创建一个整体的应用程序。具体来说,我们可以通过以下几个步骤学习Matlab app designer: 1.入门 首先,你需要打开MATLAB,然后从主菜单栏中选择"APPS",在弹出的菜单中选择"App Designer",就可以开始使用这个工具了。一开始,你会发现它的界面可能有些陌生,但是不用担心,你可以通过阅读文档或者观看一些视频教程来快速了解它的各项功能。 2.设计界面 在学习Matlab app designer的过程中,你需要先了解如何在界面中添加各种控件。你可以使用工具栏中的控件来添加按钮、文本框、图像、下拉菜单等,而这些控件的属性可以通过属性编辑器来进行配置。你还可以使用布局编辑器来排列这些控件,从而创建一个漂亮的用户界面。 3.添加功能 在创建用户界面之后,你需要添加相应的功能。Matlab app designer提供了大量的内置函数,可以帮助你完成各种功能实现。比如,你可以使用MATLAB的计算功能来处理数据,从而实现图像绘制、数据可视化等效果。同时,你还可以使用Matlab编写函数来连接不同的控件,实现交互式操作。 4.实践 最后,通过实践,你可以更深入地理解Matlab app designer的使用方法。你可以选择一些实际问题,然后使用这个工具来实现相应的解决方案。在实践过程中,你可能会遇到一些问题,可以通过查看文档或者搜索在线论坛来寻求帮助。 总之,学习Matlab app designer需要提前掌握一定的MATLAB基础,并且需要耐心地阅读文档和进行实践。通过不断地尝试和探索,你会逐渐熟悉这个工具,从而可以快速地创建出运行良好的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slandarer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值