MATLAB creative animation-the ball through the wall

Effect:
Insert picture description here
The positions of the two figures can be changed arbitrarily↓↓↓↓↓↓
Insert picture description here
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.

Guess you like

Origin blog.csdn.net/slandarer/article/details/107145126