Trò chơi máy bay trực thăng 2D, làm thế nào để tạo ra bức tường hành lang?


12

Tôi đang tìm cách điều chỉnh trò chơi "máy bay trực thăng" cổ điển (ví dụ : http://www.addictinggames.com/helbest.html ), nhưng tôi chưa tìm ra cách tạo ra động cơ tạo tường.

Bất kỳ con trỏ vào mã giả? Tôi không quan tâm lắm đến các đối tượng ở giữa - chỉ có phương pháp tạo ra các mặt theo cách tăng độ khó (đóng lại nhiều hơn, có nhiều đường cong bất ngờ hơn) khi trò chơi tiến triển.


1
Ngoài ra - để làm rõ, tôi cần các bức tường cong hơn khối, vì chúng thực sự sẽ là "sóng nước" ...
davidkomer

1
chỉ làm như các khối, nhưng nội suy trơn tru giữa mỗi sau đó.
Gustavo Maciel

Câu trả lời:


17

Bạn có thể sử dụng tiếng ồn Perlin 1D cho điều đó. Đây là hình ảnh của nhiễu 2D. Tôi lấy các mẫu có đường màu đỏ và nhân chúng với một số hằng số để có được đường màu xanh lá cây.

Nhiễu 2D với phần 1D

Hằng số bạn nhân các giá trị với sẽ xác định chiều cao của nhiễu. Vì vậy, bạn có thể dễ dàng tăng cường độ khó. Một lợi ích khác của tiếng ồn Perlin là, nó có thể tạo ra tiếng ồn có thể điều chỉnh được, để bạn có thể xây dựng một mức độ dường như vô tận.

Nếu bạn muốn tạo đáy và trần, điều quan trọng là bạn không tạo ra bất kỳ khu vực không thể vượt qua nào. Cách đơn giản nhất chỉ đơn giản là sử dụng phần "phía trên" của tiếng ồn (ví dụ 1.0 - noiseValue) làm trần và phần dưới ( noiseValue) cho phần dưới (dĩ nhiên có phần bù ở giữa). Nếu nó trông quá buồn tẻ, bạn cũng có thể xem xét hai mẫu gần, ví dụ. tưởng tượng một dòng mẫu màu đỏ khác một hoặc hai pixel lên hoặc xuống. Điều này sẽ cho một làn sóng tương tự, nhưng không giống hệt nhau.


Wow, đây là một sự giúp đỡ! Cảm ơn bạn :) Tôi đang phát triển Flash / Actioncript- và tôi thấy có một chức năng perlinNiri tích hợp ... sẽ chơi với nó và xem nó hoạt động như thế nào :)
davidkomer

@davidkomer Tôi rất vui vì điều này hữu ích. Trong flash, bạn sẽ phải tạo một BitmapDatađối tượng và sử dụng perlinNoisechức năng của nó . Bitmap có thể là 800x3 pixel hoặc một cái gì đó cực đoan, sau đó bạn có thể chỉ cần trích xuất các giá trị dòng trên cùng và dưới cùng (một cái gì đó (bitmap.getPixel(x,y) & 0xff) / 255.0sẽ cung cấp cho bạn các giá trị trong 0..1phạm vi.
bummzack

Hmmm- Tôi đã làm cho nó hoạt động, nhưng hằng số / số nhân đẩy các giá trị vào các khu vực không thể vượt qua ... đây là mã của tôi, có ý tưởng nào không? . [idx] & 0xFF) * bộ chia tỷ lệ; drawData.fillRect (Hình chữ nhật mới (idx, drawData.height - y_val, 1, y_val), 0x0000ff); drawData.fillRect (Hình chữ nhật mới (idx, 0, 1, y_val), 0x0000ff); }
davidkomer

Tôi phải chạy ngay bây giờ- nhưng một cái gì đó cho tôi biết tôi chỉ cần đọc các bình luận của bạn một cách cẩn thận hơn;) Đây là nơi tôi đang ở quá xa- pastebin.com/1tmMtEAh
davidkomer

Là gì scaler? Các giá trị bạn nhận được sẽ nằm trong phạm vi 0..255trong mã của bạn.
bummzack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.