所以我是 raylib 的新手,基本上,我正在嘗試制作一個沙盒游戲,并且我正在嘗試制作它,以便當玩家放置一個正方形或材質時,當該材質碰到螢屏邊緣時它會停止。目前,我的方塊下落時會走到螢屏邊緣并停止。但是螢屏之間有明顯的空間,方塊閃爍并且方塊不會停在同一個 X 水平面上。
當用戶點擊螢屏時呼叫此代碼。當用戶單擊并從那里正方形落到螢屏底部時,將呼叫此 DrawMat 函式。
這是我的代碼
struct Mat
{
float X, Y;
float SpeedX, SpeedY;
float Force;
float Gravity;
Vector2 MousePos;
Vector2 size;
Color color;
void DrawMat() {
DrawRectangle(MousePos.x, MousePos.y, size.x, size.y, color);
MousePos.y = 9.81f;
if (MousePos.x < 0 || MousePos.x > GetScreenWidth()) {
MousePos.x *= -1;
}
if (MousePos.y < 0 || MousePos.y > GetScreenHeight()) {
MousePos.y *= -1;
}
}
};
int main() {
InitWindow(800, 600, "Speed Z Presends to you... Satisfiying, Amazing, Niffty, Dreamy. SIMULATOR");
SetWindowState(FLAG_VSYNC_HINT);
Mat Sand;
Sand.MousePos = { -100, -100 };
Sand.size = { 5, 5 };
Sand.color = YELLOW;
Sand.X = Sand.MousePos.x;
Sand.Y = Sand.MousePos.y;
Sand.SpeedX = 300;
Sand.SpeedY = 500;
Vector2 Mousepos = {-100, -100};
bool Mouseclicked = false;
Vector2 RectSize = { 2, 2 };
int Numof = 0;
std::vector<Mat> positions = {};
while (!WindowShouldClose())
{
BeginDrawing();
ClearBackground(BLACK);
for (size_t i = 0; i < positions.size(); i )
{
positions[i].DrawMat();
}
if (IsKeyPressed(KEY_ONE)) {
Numof = 1;
}
if (Numof == 1)
{
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
{
Mouseclicked = true;
Mousepos = GetMousePosition();
Sand.MousePos = GetMousePosition();
positions.push_back(Sand);
}
}
這是我的意思的影像:

uj5u.com熱心網友回復:
我真的不明白這段代碼是如何作業的。
但是,如果您的意思是 Y 坐標應該盡可能靠近邊緣,那么您的 if 陳述句應該是這樣的:
if (MousePos.y < 0) {
MousePos.y *= -1;
}
else if (MousePos.y > GetScreenHeight()) {
MousePos.y = GetScreenHeight();
}
根據需要調整最后一個運算式。也許你需要減去物件的高度,這樣它就不會消失:
else if (MousePos.y > GetScreenHeight() - size.y) {
MousePos.y = GetScreenHeight() - size.y;
}
為什么這是必要的?
我會想象您進行的渲染MousePos.x用作左側位置和MousePos.y頂部位置,如下所示:
/---- this corner is (MousePos.x, MousePos.y)
|
| v |
| ---------------- ---- |
| | | ^ |<- screen bottom edge
| | | | size.y |
-------------|----------------|--|--------------
| | v
---------------- ----
因此,要將沙粒保留在螢屏上,您必須確保角落位于使其可見的位置。正如我們在 ASCII 圖片上看到的,對于 Y,它意味著最大值是GetScreenHeight() - size.y。
請注意,您肯定對 X 坐標有同樣的問題(即您可能希望最大值為GetScreenWidth() - size.x)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/493783.html
上一篇:陣列上的宇宙飛船算子
