Bí quyết thực sự với điều này là khoa học cấp trung học; mà bạn nên làm Trong trường hợp bạn không tìm kiếm nhanh trên Google sẽ giúp bạn bắt đầu . Để giải thích làm thế nào bạn tránh được suy nghĩ 'người mới' lấy ví dụ về người đổ bộ mặt trăng .
Một khi bạn đã đọc rằng [change in position] = [velocity] * [time passed]
nó trở nên rõ ràng sẽ cần phải theo dõi các biến đó:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Theo đó bạn chỉ cần áp dụng vận tốc cho vị trí mỗi khung:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Bây giờ chúng tôi muốn thay đổi vận tốc mỗi khung hình để chúng tôi có thể thêm trọng lực. Theo cùng một nguồn chính xác [change in velocity] = [acceleration] * [time passed]
. Do đó, chúng ta có thể áp dụng nguyên tắc chính xác tương tự:
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Bây giờ bạn cần một cách để người chơi điều khiển tàu vũ trụ của mình. Từ việc đọc thêm về vật lý cơ bản, bạn sẽ học được rằng chuyển động là kết quả của lực - tôi không thể tìm thấy một nguồn nhưng [change in acceleration] = ([force] / [mass]) * time
(theo như tôi nhớ). Vì vậy, khi người chơi nhấn một phím, bạn chỉ cần đặt fx
và fy
các biến thành một cái gì đó và áp dụng phương trình trong quá trình cập nhật của bạn.
Cuối cùng, bạn cần suy nghĩ về vật lý xung quanh các vật thể trong trò chơi của bạn - và thay vì cố gắng làm cho chúng di chuyển theo cách bạn nghĩ, thay vì tìm kiếm phương trình .
Lưu ý trong tương lai: Hãy nhớ rằng đây chắc chắn không phải là cách tốt nhất để làm vật lý (đây được gọi là Tích hợp Euler và có thể dẫn đến một số tình huống kỳ lạ ở tốc độ khung hình thấp) - bạn cần xem xét các cách khác để làm việc (Bài viết đó có khá tốt đẹp viết lên những điều cơ bản là tốt). Tuy nhiên, hãy gắn bó với Euler Integration ngay bây giờ, vì điều đó có nghĩa là bạn đang cố gắng học một điều ít hơn.
Những trò chơi nào sẽ dạy bạn cách suy nghĩ trong tư duy đúng?
Làm thế nào bạn sẽ kiểm tra rằng bạn đã làm mọi thứ chính xác và với suy nghĩ đúng? Chèn một Sleep(10 milliseconds)
trong vòng lặp trò chơi của bạn và mọi thứ vẫn sẽ di chuyển và phản ứng giống như tốc độ khung hình đầy đủ.
Cuối cùng, xin vui lòng tránh xa 3D (và có lực lượng Quancyions và Ma trận) cho đến khi bạn có nhiều kinh nghiệm với việc làm cho các trò chơi 2D hoạt động. Tôi muốn nói rằng có khá nhiều nhà phát triển trò chơi không thực sự biết cách hoạt động của Quancyions hoặc Ma trận - mà chỉ biết cách sử dụng chúng - tiếp cận chúng sau này rất nhiều (hoặc không bao giờ, trò chơi 2D rất thú vị và có thể khá thành công). Bạn không thực sự cần phải biết đại số tuyến tính và tiếp tục làm điều này ở cấp độ cơ bản (nhưng nó thực sự có ích, vì vậy hãy đến một số lớp học ban đêm nếu bạn có thể).
Phần thưởng cuối cùng: Một điều mà giáo viên mỹ thuật của tôi luôn nói với tôi là "đừng vẽ những gì bạn nghĩ bạn nhìn thấy, hãy vẽ những gì bạn nhìn thấy". Điều tương tự cũng áp dụng ở đây "không mô hình hóa những gì bạn nghĩ xảy ra ( object.position++
), mô hình hóa những gì xảy ra (` object.poseition + = vận tốc * thời gian) "- ít nhất là đến giới hạn hợp lý (bạn không mô hình hóa một hệ thống hoàn toàn chính xác, nhưng thực hiện một cái gì đó là một sự bắt chước tốt).