Làm thế nào để thiết kế một chế độ hướng dẫn riêng biệt?


7

Tôi đang làm việc trên một trò chơi "xã hội", hoàn thành khoảng 90%. Một trong những tính năng còn lại là chế độ hướng dẫn.

Về cơ bản, chế độ hướng dẫn sẽ hạn chế người dùng truy cập vào một số phần của UI và giới hạn các tính năng (như các mục của cửa hàng). Hướng dẫn sẽ chỉ tiến triển nếu một sự kiện nào đó được kích hoạt, cụ thể là theo hướng dẫn.

Mã đã sẵn sàng và chúng tôi đã có một trò chơi "gần như" hoạt động. Vấn đề là tôi đã không lường trước được chế độ hướng dẫn trong khi tôi đang thực hiện 90%. Yêu cầu của tôi là không nên có bất kỳ tải / chuyển từ chế độ hướng dẫn sang chế độ bình thường. Điều này có nghĩa là tôi phải nhận tiến trình từ hướng dẫn (không hiển thị lại tài sản và nội dung).

Làm thế nào tôi nên thiết kế nó theo cách mà tôi sẽ không chạm vào bất cứ thứ gì từ mã cũ của tôi? Tôi muốn nó dễ dàng như việc cắm nó vào. Tôi không muốn kẹt hướng dẫn trong mã cũ của mình vì điều này sẽ dẫn đến nhiều lỗi.


Bạn nên cung cấp thêm chi tiết, như nếu bạn có hỗ trợ cho tập lệnh và liệu các tập lệnh đó có thể thay đổi GUI hay không ... Có thể đưa vào sơ đồ các lớp. Tái bút: bạn không thể 'thấy trước' mọi thứ để mã của bạn phải luôn được tái cấu trúc.
Den

2
Tôi sẽ nói một điều hiển nhiên: Nếu bạn muốn bật hoặc tắt các thành phần GUI trong trò chơi, bạn sẽ cần thêm hỗ trợ cho nó. Chỉ bạn mới có thể biết cách thực hiện điều đó (hoặc những người khác trong nhóm của bạn).
Tối đa

Bạn đang sử dụng ngôn ngữ nào?
John McDonald

Mục tiêu C. Tôi đang phát triển cho iOS. Có vẻ như đó là cách sạch nhất để làm điều đó. Tôi sẽ không thể đăng một sơ đồ ngay bây giờ kể từ khi tôi để nó ở nơi làm việc. Tôi sẽ đăng nếu tôi gặp khó khăn. Hình như đã rung chuông rồi.
Sylpheed

Câu trả lời:


3

Một số thông tin sẽ giúp bạn có câu trả lời tốt hơn. Không biết nhiều về loại trò chơi bạn có hoặc cấu trúc cấp độ của bạn trông như thế nào, tôi chỉ có thể tạo ra một cú đâm trong bóng tối.

Điều đó nói rằng, nếu tôi đang làm một cái gì đó tương tự với dự án hiện tại của tôi, tôi sẽ tạo một cấp độ đặc biệt hướng dẫn người dùng thông qua các chủ đề được đề cập. NPC của bạn có thể được tạo chỉ với các mục bạn muốn có sẵn trong hướng dẫn, ví dụ.

Theo như ngăn chặn quyền truy cập vào một số thành phần UI nhất định, nếu bạn không thể thêm hoặc xóa các thành phần bạn muốn / không muốn trong hướng dẫn của mình, bạn có thể phải kết hợp bộ lọc vào mã hiện có để xác định liệu một thành phần có tồn tại không hoặc không (nghĩ "hạn chế truy cập").


Hãy nói nó giống như Sims City. Tôi không biết nhiều về trò chơi nhưng nghĩ rằng nó có một hướng dẫn sẽ hướng dẫn người dùng cách chơi trò chơi. Tất nhiên, bạn muốn tắt một số thành phần UI và đặt giới hạn trong khi hướng dẫn. Vì vậy, cách tốt nhất là cung cấp một giao diện cho giao diện người dùng của tôi? Vì vậy, tôi có thể vô hiệu hóa và kích hoạt chúng khi cần thiết.
Sylpheed

Bạn sẽ cần có thể thêm / xóa các thành phần UI khỏi hướng dẫn của mình hoặc bạn sẽ cần xây dựng UI của mình sao cho có điều kiện về "hạn chế truy cập". Ví dụ: nếu bạn có nút "lưu trò chơi" mà bạn không muốn có sẵn trong hướng dẫn của mình, bạn có thể gói nó trong một câu lệnh như if (canSaveGame ()) {panel.add (saveButton); } trong đó canSaveGame () là một phần của hệ thống hạn chế truy cập của bạn.
thịt

Không cần phải loại bỏ chúng. Tôi chỉ cần vô hiệu hóa chúng. Tôi sẽ thử tái cấu trúc mã để nó có thể bị vô hiệu hóa / kích hoạt thông qua một giao diện. Làm thế nào bạn sẽ đối xử với từng sự kiện hướng dẫn? Bạn có đề nghị tôi tạo các đối tượng riêng biệt cho mỗi sự kiện không? Tôi sợ rằng lớp hướng dẫn của tôi có thể nở.
Sylpheed

Không chắc chắn những gì bạn có ý nghĩa về các sự kiện hướng dẫn. Tại sao họ cần điều trị đặc biệt?
thịt

Giả sử hướng dẫn được chia thành các giai đoạn (sự kiện) khác nhau. Người dùng chỉ có thể chuyển sang giai đoạn tiếp theo nếu anh ta làm theo hướng dẫn. Mỗi "sự kiện hướng dẫn" sẽ chờ đợi điều gì đó thú vị sẽ xảy ra. Sau khi được kích hoạt, một sự kiện hướng dẫn mới sẽ được khởi tạo để lắng nghe một sự kiện khác dựa trên "giai đoạn hướng dẫn" hiện tại. Mối quan tâm của tôi là có khoảng 20 bước trong hướng dẫn. Tôi đang lên kế hoạch phân chia từng bước cho các đối tượng khác nhau.
Sylpheed

2

Tôi đang làm một hướng dẫn cho trò chơi C # của tôi ngay bây giờ. Tôi đang tách hướng dẫn khỏi trò chơi bằng cách sử dụng các sự kiện. Trong trò chơi của mình, tôi có một loạt các sự kiện được kích hoạt khi trạng thái trò chơi thay đổi theo nhiều cách khác nhau: Thực thể di chuyển, bị phá hủy, được xây dựng, nâng cấp hoàn tất, v.v. Hướng dẫn của tôi lắng nghe các sự kiện quan tâm và có khả năng để thao túng HUD. Đó là tất cả những gì bạn cần. Để làm cho nó hoàn toàn rõ ràng, trò chơi không có ý tưởng rằng hướng dẫn đang xảy ra.

Điều này cũng có thể quan trọng: Hướng dẫn của tôi là một lớp con của Kịch bản, trong đó Trò chơi luôn thực hiện Kịch bản. Vì tôi đang sử dụng C #, tôi có thể lấy bất kỳ Kịch bản nào của mình và ném chúng vào tệp tập lệnh C #, nhưng ngay bây giờ, tất cả các Kịch bản của tôi được biên dịch trực tiếp vào trò chơi.

Hiện tại lớp học đang có một chút công việc đang tiến hành, nhưng đây là phiên bản hơi lỗi thời mà bạn có thể xem: http://asteroidoutpost.svn.sourceforge.net/viewvc/asteroidoutpost/trunk/Scenutions/TutorialScenario.cs? xem = đánh dấu


0

Tôi cũng đang làm một hướng dẫn cho trò chơi flash của mình và đây là cách tôi thiết lập nó. Mỗi phần của trò chơi kiểm tra một đối tượng Hướng dẫn để kiểm tra xem liệu một hành động có sẵn cho người chơi thực hiện hay không. Nếu mô-đun hướng dẫn không tồn tại hoặc không hoạt động, thì chúng tôi có thể giả định rằng người chơi có thể làm bất cứ điều gì.

Ví dụ, sử dụng trò chơi Sim City của bạn, giả sử rằng khi hướng dẫn bắt đầu, bạn không muốn người chơi có thể làm bất cứ điều gì cho đến thời điểm thích hợp. Bạn có thể có các cờ trong đối tượng hướng dẫn của mình như, PLAYER_CAN_USE_TOOLebar, PLAYER_CAN_SWITCH_VIEWS hoặc PLAYER_CAN_DESIGNATE_ZONE, v.v ... đều được đặt thành FALSE. Khi người chơi bước qua hướng dẫn của bạn, bạn có thể bắt đầu đặt các cờ đó thành đúng.

Đối với phần UI của bạn, hãy chặn tín hiệu cho mô hình hoặc bộ điều khiển thực sự thực hiện hành động nếu cờ hướng dẫn của bạn không được đặt:

// If our tutorial module/tracker exists, but the action flag is set to false
// then leave our method early
if (mTutorial.isActive() && !mTutorial.checkFlag(PLAYER_CAN_DESIGNATE_ZONE)) {
  return false;
}
//Do the rest of the action here

Để mong muốn các sự kiện cụ thể, bạn có thể chuyển sự kiện trở lại vào đối tượng hướng dẫn của mình để xác thực đó là những gì người chơi cần làm để tiếp tục bước hướng dẫn đó. Ví dụ: nếu bạn cần người chơi tạo khu dân cư tại một X, Y cụ thể:

var evt:GameEvent = new GameEvent(EVENT_CREATE_ZONE, ZONE_TYPE_RESIDENTIAL, startX, startY, endX, endY);
if (mTutorial.isActive()) {
  if (!mTutorial.checkFlag(PLAYER_CAN_DESIGNATE_ZONE)) {
    return false;
  }
  //Check to see if this event is okay
  if (!mTutorial.validateEvent(evt)) {
    //Show why the player can't do this via popup
    return false;
  }
}
//Do the rest of the action here

Tôi hy vọng điều đó đã giúp. Thật không may, bạn sẽ phải thêm các kiểm tra hướng dẫn vào mã cũ của bạn để làm việc này. Nhưng bằng cách giả định rằng tất cả các hành động là hợp lệ trừ khi đối tượng hướng dẫn tồn tại sẽ giảm bớt quá trình tích hợp này và cho phép bạn giảm thiểu các lỗi của mình.


Tôi sẽ xem xét việc coi mỗi sự kiện hướng dẫn là các đối tượng riêng biệt. Tôi sẽ cố gắng thiết kế mã cho hướng dẫn từ đây. Cảm ơn.
Sylpheed
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.