Các toán học đằng sau laser tím 'Raiden 2' là gì?


15

Đường đi của tia laser bị ảnh hưởng bởi đầu vào của người dùng và kẻ thù có mặt trên màn hình. Đây là một video, lúc 5:00 phút, tia laser trong câu hỏi được hiển thị: Raiden II (PS) - 1 Loop Clear - Phần 2

CẬP NHẬT

Dưới đây là một thử nghiệm sử dụng Inkscape, con tàu ở dưới cùng, 4 kẻ thù đầu tiên được nhắm mục tiêu bởi plasma. Dường như có một loại mô hình. Tôi di chuyển con tàu trước, sau đó tay cầm từ nó tạo thành một góc 45 °, sau đó trong khi cố gắng khớp với đường cong, tôi tìm thấy một mẫu tay cầm song song và tiếp tục như vậy cho đến khi tôi gặp được kẻ thù cuối cùng. nhập mô tả hình ảnh ở đây

Cập nhật, 26/05/2012 : Tôi đã bắt đầu một dự án XNA bằng cách sử dụng beziers, vẫn còn một số công việc cần thiết, sẽ cập nhật câu hỏi vào tuần tới. Giữ nguyên !

nhập mô tả hình ảnh ở đây

Cập nhật: 30/05/2012 : Có vẻ như họ đang sử dụng các đường cong Bézier, tôi nghĩ rằng tôi sẽ có thể sao chép / bắt chước một plasma như vậy. Có hai chủ đề mới tôi phát hiện ra từ lần trước: Chiều dài vòng cung , hiện tượng Runge , lần đầu tiên sẽ giúp chuyển động tuyến tính có thể qua đường cong Bézier, lần thứ hai sẽ giúp tối ưu hóa số lượng đỉnh. Lần tới tôi sẽ đặt một video để bạn có thể xem tiến trình 8-)


2
Vâng, đó là một spline của một số loại. Có thể đường cong Bézier . Tôi không chắc câu hỏi này có thể trả lời được bởi bất kỳ ai khác ngoài các nhà phát triển ban đầu không. Nếu bạn đang cố gắng tạo lại hiệu ứng này, bạn nên cho chúng tôi thấy những gì bạn có và cho chúng tôi biết những gì về nó không hoạt động.
MichaelHouse

2
Không có ý tưởng, nhưng nó có một số lượng lớn của nó triệt để.
Hackworth

1
Đã chơi một lượng Raiden không lành mạnh, tôi nghi ngờ kem đánh răng là bất kỳ loại đường cong dạng kín nào. Nó dường như luôn giữ một lượng bộ nhớ hợp lý. Tôi nghi ngờ nó đang thực hiện một số loại đường dẫn với bán kính quay vòng bắt buộc.

@ Byte56: Các nhà phát triển / người hâm mộ của Shmup được dành riêng, tôi sẽ ngạc nhiên nếu điều này không được ghi lại / thiết kế ngược ở đâu đó vào lúc này.

3
Có vẻ như nó đặt các phân đoạn một lần xuất phát từ con tàu, với độ uốn cong tối đa và mỗi phân đoạn sẽ quay về phía kẻ thù nếu có ở gần hoặc theo hướng di chuyển của con tàu.
Kevin Reid

Câu trả lời:


6

Tôi chỉ tạo ra một cái gì đó có thể giúp bạn. Đó là phản ứng để giúp đỡ ai đó trên các diễn đàn GLBasic.

Đây là liên kết diễn đàn với đề xuất của tôi: Random Textured Cán Hills

Điều này được viết bằng GLBasic, nhưng tôi đã cố gắng giữ cho nó dễ đọc, vì vậy nó có thể dễ dàng chuyển đổi sang bất kỳ ngôn ngữ nào.

Để sử dụng nó cho nhu cầu của bạn, bạn sẽ cần tạo dữ liệu / điểm spline của mình. Thay thế các điểm 'đồi' trong ví dụ của tôi bằng các điểm spline của bạn. Bạn chỉ cần thêm một hiệu ứng hoạt hình / nhấp nháy bằng cách nào đó. Có thể một sự thay đổi kết cấu ngẫu nhiên.

'Phép thuật' thực sự xảy ra trong chức năng 'Addpoint' của tôi:

FUNCTION AddPoint: h AS THillPoint
    DIMPUSH self.points[], h

    // Is this the very first data point?
    IF LEN(self.points[]) = 1
        self.points[0].pu.Set(0, self.points[0].pm.y - self.texture_ht_up)
        self.points[0].pd.Set(0, self.points[0].pm.y + self.texture_ht_dn)
        RETURN
    ENDIF

    ALIAS h0 AS self.points[-2]  // Reference to the 2nd last point
    ALIAS h1 AS self.points[-1]  // Reference to the last point
    LOCAL angle#
    LOCAL v1 AS TVector
    LOCAL v0 AS TVector

    // Calculate 'p2' of HillPoint - form rectangle with previous point
    angle = ATAN(h1.pm.y - h0.pm.y, h1.pm.x - h0.pm.x)  -90// Angle of the two points

    v1.x = COS(angle) * self.texture_ht_up + h1.pm.x
    v1.y = SIN(angle) * self.texture_ht_up + h1.pm.y
    v0.x = COS(angle) * self.texture_ht_up + h0.pm.x
    v0.y = SIN(angle) * self.texture_ht_up + h0.pm.y
    h0.pu = h0.pu.AverageWith(v0)
    h1.pu.Copy(v1)

    v1.x = COS(angle) * -self.texture_ht_dn + h1.pm.x
    v1.y = SIN(angle) * -self.texture_ht_dn + h1.pm.y
    v0.x = COS(angle) * -self.texture_ht_dn + h0.pm.x
    v0.y = SIN(angle) * -self.texture_ht_dn + h0.pm.y
    h0.pd = h0.pd.AverageWith(v0)
    h1.pd.Copy(v1)
ENDFUNCTION

Đây là nơi tôi tính toán các hình tứ giác / đa giác cuối cùng để vẽ sprite dọc theo dòng.

Đây là kết quả cuối cùng: nhập mô tả hình ảnh ở đây

Và với khung dây của đa giác được bật: nhập mô tả hình ảnh ở đây


1
Tuyệt vời tôi sẽ xem xét nó. BTW, liên kết bạn đưa ra bị hỏng.
Aybe

3
Liên kết dường như không bị phá vỡ đối với tôi ...
doppelgreener

Tôi vừa kiểm tra liên kết Random Textured Rolling Hills ngay bây giờ, nó mang đến cho tôi một lỗi 404.
Aybe

1
Kỳ dị. Nó vẫn hoạt động cho tôi. Nhưng đây là liên kết cơ bản: glbasic.com/forum/index.php?topic=8118
Doug.McFarlane

Tôi cảm thấy thất vọng, tôi đã thử trang chủ, nó hiển thị 'Nó hoạt động!' và đó là ... kỳ lạ.
Aybe
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.