hiệu ứng đường hầm cocos2d


12

Tôi đang tìm cách tạo hiệu ứng đường hầm tương tự trong COCOS2D (iOS). Bất cứ ai có thể đề nghị bất kỳ con trỏ?

Hình ảnh tham khảo

tham chiếu video 1

tham chiếu video 2

Cho đến bây giờ tôi đã thử với một số sprite hình vòng với tỷ lệ giảm và vị trí trung tâm đến cùng một điểm và giữ Z giảm dần cho mỗi sprite nhỏ hơn.

Cùng với đó, hoạt hình nó bằng CCScaleTo và thay đổi kích thước thành 2.0 với thời lượng hoạt hình nhưng dù sao nó cũng không đến gần hiệu ứng đường hầm được hiển thị trong tài liệu tham khảo.

Cảm ơn, sam

Câu trả lời:


10

Tôi tìm thấy mô tả thực hiện từ tác giả của hiệu ứng này:

Nó chắc chắn là rất nhiều công việc để tạo ra ảo ảnh chiều sâu trong mặt phẳng 2D.

Nguyên tắc rất dễ mặc dù: các vòng tròn bắt đầu ở giữa màn hình với tỷ lệ 0. Sau đó, vòng tròn đầu tiên của đường hầm bắt đầu chia tỷ lệ theo thời gian trôi qua (tỷ lệ tuyến tính không hoạt động) và sau một thời gian, vòng tròn thứ hai bắt đầu mở rộng , sau đó là thứ 3 và thứ 4, v.v.

Sau đó, bạn hạ thấp tỷ lệ giá trị alpha cho các vòng tròn (những người ở phía xa có giá trị alpha thấp hơn các vòng tròn phía trước để tạo ảo giác mờ), bạn xác định đường dẫn mà mọi vòng tròn phải đi theo, di chuyển X và Y tọa độ của nó, sau đó bạn đặt một con tàu vũ trụ ở giữa màn hình. Nghiêng thiết bị làm cho đường hầm dịch chuyển sang trái và phải, lên và xuống (nhưng điều đó mang lại cảm giác rằng tàu vũ trụ đang di chuyển thay thế!).

Khi các vòng tròn đi ra khỏi màn hình, chúng sẽ nhanh chóng mờ dần và đưa trở lại vị trí ban đầu (để tiết kiệm bộ nhớ vì vậy tôi không cần phải tạo các vòng tròn mới nhưng tôi sử dụng lại các vòng tròn tương tự).

Xin lỗi về tiếng Anh của tôi, nhưng tôi hy vọng điều đó giải thích ý tưởng chung :)


1

Bạn gần như ở đó với việc có nhiều vòng tròn có giá trị và tỷ lệ Z giảm. Chỉ cần không tập trung tất cả.

Bạn cần theo dõi điểm mà bạn muốn đường hầm đâm vào chân trời sự kiện ở xa. Bạn có thể di chuyển điểm đó theo thời gian theo cách bạn muốn.

Sau đó, khi bạn đặt từng sprite mới, đặt nó tại điểm đó, chia tỷ lệ nhỏ, đặt độ mờ theo cách bạn thích, sau đó bắt đầu CCSpawnvới CCScaleToCCFadeTo, ví dụ:

sprite->runAction(CCSpawn::create(
    CCScaleTo::create(2.0f, 1.5f),
    CCFadeTo::create(5.0f, 255),
    nullptr));

Tạo trước tất cả các sprite và xoay cái nào ở phía sau để giữ cho nó hiệu quả.


1

Tôi có lẽ sẽ cố gắng để nó được sắp xếp với một lớp nền và các hạt nhỏ. Bạn có thể kiểm tra các hiệu ứng trong trình thiết kế hạt và chơi chúng trong lớp backgroung sau đó.


0

Thành thật mà nói tôi không nghĩ rằng hình ảnh được hiển thị bằng máy ảnh 2D. Có vẻ như trò chơi được kết xuất bằng hệ thống kết xuất 3D. Nhưng vì bạn muốn sử dụng cocos2d, bạn cần phải tự mô phỏng ma trận chuyển đổi 3D đó. Đây là một ý tưởng để bắt đầu: bạn biết trong một cảnh 3D, mọi đối tượng được xác định bởi 3 giá trị vô hướng, x, y và z. Phương pháp đơn giản nhất bạn có thể sử dụng là nhân rộng như bạn đề xuất, nhưng không phải như bạn đã thực hiện! ccScaleTosẽ dẫn đến việc chia tỷ lệ tuyến tính theo thời gian, điều này sẽ không tạo ra cảm giác 3D. Bạn có thể bắt đầu với tỷ lệ đối tượng theo giá trị của1/z . Điều này giống hệt với ma trận chiếu đơn giản nhất mà bạn có thể nghĩ ra! nếu bạn cảm thấy thậm chí không làm bạn hài lòng, hãy xem các ma trận chiếu hiện đại hơn và phức tạp hơn .

Lưu ý bên lề: thực hiện ma trận chiếu tùy chỉnh trong cocos2D sẽ hơi bẩn. nếu bạn thực sự không thích hiệu ứng này, tôi thực sự khuyên bạn nên thay đổi công cụ của mình thành một hỗ trợ 3D.


Tôi không muốn giới thiệu 3d để làm cho mọi thứ phức tạp hơn nhưng hiệu ứng này được tạo ra trong cocos2d để hiển thị chế độ xem đường hầm giả (tôi đã có một cuộc trò chuyện với tác giả của trò chơi này vào lúc nào đó)
Saurabh Passolia

0

Đây là cách tôi đã làm nó, trong mã giả

Kích hoạt hiệu ứng đường hầm:

  1. Tạo CCRepeatForever (CCFunc (createCircle))
  2. Thêm một nút vào cảnh của bạn được gọi là "ViewNode"

createdCircle ()

  1. Tạo lớp, tư thế ở trung tâm của Cảnh. Thêm nó khi còn nhỏ vào "ViewNode".
  2. chạy hành động: CCSequence (CCEaseExponentialIn (CCScaleTo), CCRemoveSelf)
  3. Đặt công cụ trong lớp của bạn, ví dụ như cirkels, kẻ thù, tàu vũ trụ, bất cứ điều gì.

Kiểm soát (với thị sai)

  1. Đối với tất cả các lớp có hiệu ứng đường hầm (tức là con của ViewNode)
  2. cập nhật vị trí neo dựa trên vị trí cảm ứng.

Vị trí là Điểm biến mất, do đó, bạn không thể di chuyển các lớp mà không di chuyển điểm biến mất. Tuy nhiên, nếu bạn di chuyển điểm neo, lớp dường như di chuyển, nhưng Điểm Vanishing vẫn giữ nguyên - điều này tạo ra hiệu ứng thị sai, bởi vì di chuyển ccp (0.2,0.2) trên một lớp gần (quy mô lớn) có hiệu quả hơn di chuyển tương tự trên một lớp xa.

Bạn bọc mọi thứ trong các lớp có cùng kích thước, để đảm bảo rằng việc định vị lại neo tạo ra chuyển động giống nhau trong tất cả các lớp.

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.