Effect:
The positions of the two figures can be changed arbitrarily↓↓↓↓↓↓
Complete code:
function cannonball
global cannonballFig1 cannonballFig2 cannonballAxes1 cannonballAxes2
global cannonballTimer
global postionPart1 postionPart2
cannonballFig1=uifigure('units','pixels',...
'position',[15 450 300 200],...
'Numbertitle','off',...
'menubar','none',...
'resize','off',...
'name','cannonball 1.0 | by slandarer',...
'color',[0.95 0.95 0.95]);
cannonballFig2=uifigure('units','pixels',...
'position',[400 150 400 300],...
'Numbertitle','off',...
'menubar','none',...
'resize','off',...
'name','cannonball 1.0 | by slandarer too',...
'color',[0.95 0.95 0.95]);
cannonballAxes1=uiaxes('Units','pixels',...
'parent',cannonballFig1,...
'Position',[0 0 300 200],...
'Color',[0.99 0.99 0.99],...
'Box','on', ...
'XLim',[0 300],...
'YLim',[0 200], ...
'YDir','normal', ...
'XColor',[0.99 0.99 0.99],'YColor',[0.99 0.99 0.99],...
'XTick',[],'YTick',[]);
cannonballAxes2=uiaxes('Units','pixels',...
'parent',cannonballFig2,...
'Position',[0 0 400 300],...
'Color',[0.99 0.99 0.99],...
'Box','on', ...
'XLim',[0 400],...
'YLim',[0 300], ...
'YDir','normal', ...
'XColor',[0.99 0.99 0.99],'YColor',[0.99 0.99 0.99],...
'XTick',[],'YTick',[]);
cannonballAxes1.Toolbar.Visible='off';
cannonballAxes2.Toolbar.Visible='off';
uibutton('parent',cannonballFig1,...
'position',[220,160,60,30],...
'Text','开始',...
'FontWeight','bold',...
'ButtonPushedFcn',@giveSpeed,...
'FontColor',[0.27 0.25 0.25],...
'FontSize',15);
postionPart1=get(cannonballFig1,'position');
ballPos=[20,150]+postionPart1(1,1:2);
vy=0;
a=0;
vx=0;
scatter(cannonballAxes1,ballPos(1)-postionPart1(1),ballPos(2)-postionPart1(2),200,'filled','CData',[0 0 0]);
scatter(cannonballAxes2,[],[],220,'filled','CData',[98 68 38]./255);
fps = 20;
cannonballTimer=timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @cannonballgame);
start(cannonballTimer)
function giveSpeed(~,~)
ballPos=[20,150]+postionPart1(1,1:2);
vy=-0.5;
a=0.2;
vx=4;
end
function cannonballgame(~,~)
postionPart1=get(cannonballFig1,'position');
postionPart2=get(cannonballFig2,'position');
vy=vy-a;
ballPos=ballPos+[vx,vy];
if ballPos(1)>=postionPart1(1)&&ballPos(1)<=postionPart1(1)+postionPart1(3)&&ballPos(2)<=postionPart1(2)+10
vy=-vy*0.6;
end
if ballPos(1)>=postionPart2(1)&&ballPos(1)<=postionPart2(1)+postionPart2(3)&&ballPos(2)<=postionPart2(2)+10
vy=-vy*0.6;
end
scatter(cannonballAxes1,ballPos(1)-postionPart1(1),ballPos(2)-postionPart1(2),200,'filled','CData',[0 0 0]);
scatter(cannonballAxes2,ballPos(1)-postionPart2(1),ballPos(2)-postionPart2(2),200,'filled','CData',[0 0 0]);
end
end
Note:
This program is only for connecting hands, not pursuing performance. The two frameworks are written using uifigure and uiaxes. Due to its low support for animation, it may be stuck. It is recommended to use figure and axes to rewrite the program.