如何在monogame中缩小和增长一个矩形?

Posted

技术标签:

【中文标题】如何在monogame中缩小和增长一个矩形?【英文标题】:How do I shrink and grow a rectangle in monogame? 【发布时间】:2021-11-25 05:53:02 【问题描述】:

现在我正在创建一个 wack-a-mole 游戏作为我的任务。但是为了使游戏功能尽可能完美,我需要使我的痣纹理的矩形随着痣从孔中向上移动而增长。我还需要做到这一点,以便当痣整体向后移动时矩形会缩小。现在,当它没有完全向上时,您可以击中孔下方的痣。我正在使用 monogame 作为代码。

【问题讨论】:

【参考方案1】:

与所有作业问题一样,我不愿给出完整的答案。请尝试理解代码并以自己的方式重写。

这是一个使用状态机的可能解决方案:

//Class level variables
Vector2 AdjustStepSize;

// Place existing large mole Rectangle values:
Vector2 BasePosition; // left and top
Vector2 BaseSize; // width and height

float HoldTimerLength = 30; // Number of steps to show before shrink
int GrowSpeed = 5;  //Number of steps to grow/shrink. Adjust as needed

int GrowStep = 0;
float HoldTimer = 0;
int State = 0; // 0 = Do nothing, 1 Grow, 2 wait for holdtimer, 3 shrink


Rectangle DrawRectangle;

// Place the following code in the constructor
AdjustStepSize = BaseSize / (GrowSpeed  << 2);

//in Update:

if (State == 2)

   //Do collision testing


switch(State)

   case 0:
      break;
   case 1:
      if (++GrowStep == GrowSpeed) State = 2;
      break;
   case 2:
      if (--HoldTimer == 0) State = 3;
      break;
   case 3:
      if (--GrowStep == 0) State = 0;
      break;

var tmp = (AdjustStepSize * GrowStep + BasePosition);
DrawRectangle.Location = new Point(tmp.X,tmp.Y);
tmp = (BaseSize - AdjustStepSize * GrowStep);
DrawRectangle.Size = new Point(tmp.X,tmp.Y);


// new method, Called when the mole should pop-up
public void Pop()

   HoldTimer = HoldTimerLength; // reset timer
   State = 1;


// draw using DrawRectangle

在不注明出处的情况下复制和粘贴将违反license 的“SA”条款。

【讨论】:

以上是关于如何在monogame中缩小和增长一个矩形?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中缩小和放大图标动画?

如何从 Blender 中导出 fbx 纹理以在 Monogame 中使用

在monogame中克隆和绘制对象

如何使用 JavaFX 实现放大/缩小?

如何从Blender导出fbx纹理以用于Monogame

按矩形中心垂直对齐 SVG 内的矩形元素