MATLAB开发GUI版BlackJack游戏时添加图像无法固定坐标轴
解决MATLAB GUI中BlackJack手牌坐标轴固定问题
我懂你现在的头疼事儿——开发BlackJack的GUI时,明明已经手动设置了庄家和玩家手牌对应的坐标轴范围,但一添加卡牌图像,坐标轴就自动变动,完全锁不住。这在MATLAB里是个挺常见的小坑,多半是添加图像时的默认行为或者hold状态没设置对,给你几个实用的解决办法:
1. 先锁坐标轴再开hold,防止重置
创建完坐标轴之后,先开启hold on,这样后续加图像时不会把你之前设的轴范围冲掉,同时再手动确认一次轴锁定:
% 庄家坐标轴设置完后加这两行 hold(self.dealerHand, 'on'); axis(self.dealerHand, 'manual'); % 玩家坐标轴同理 hold(self.playerHand, 'on'); axis(self.playerHand, 'manual');
2. 控制卡牌图像的位置,别超出轴范围
如果你用image或者imshow加卡牌,得确保图像的显示区域落在你设的XLim([0,10])和YLim([0,1])里。比如用image的话,可以手动指定每张牌的X坐标区间,这样多张牌排开也不会越界:
% 假设cardImg是你的卡牌图像矩阵,第一张牌放在0-2的X区间 image([0 2], [0 1], cardImg, 'Parent', self.playerHand); % 第二张就放2-4,以此类推 image([2 4], [0 1], nextCardImg, 'Parent', self.playerHand);
3. 把坐标轴的自动缩放彻底关掉
除了XLimMode和YLimMode设为manual,还可以把刻度模式也设成手动,再关掉自动缩放属性,从根源上杜绝轴乱跑:
set(self.dealerHand, ... 'XLimMode', 'manual', ... 'YLimMode', 'manual', ... 'XTickMode', 'manual', ... 'YTickMode', 'manual', ... 'AutoScale', 'off'); % 玩家坐标轴照猫画虎就行 set(self.playerHand, ... 'XLimMode', 'manual', ... 'YLimMode', 'manual', ... 'XTickMode', 'manual', ... 'YTickMode', 'manual', ... 'AutoScale', 'off');
4. 检查添加图像的代码有没有“偷偷”改轴
比如用imshow的话,它默认会自动调整轴范围来适配图像,所以加完图之后得手动把轴切回锁定模式:
imshow(cardImg, 'Parent', self.dealerHand); axis(self.dealerHand, 'manual'); % 加完图立刻锁回去
对了,你的玩家坐标轴代码好像没写完,记得把Parent补成self.window哦,不然会报错:
self.playerHand = axes('Parent', self.window,... 'XLimMode', 'manual',... 'XLim', [0, 10],... 'YLimMode', 'manual',... 'YLim', [0, 1],... 'Title', 'Player',... 'Units', 'normalized',... 'Position', [.05, .40, .90, .25]); % 把位置调在庄家轴下方,布局更合理
按上面的方法调整后,坐标轴应该就能老老实实待在你设置的范围里,不会因为加卡牌乱跑了~
内容的提问来源于stack exchange,提问作者Adam Johnston
相关产品推荐
相关产品推荐

