Chuyển đổi qua lại giữa các màn hình giao diện trong game

Một phần của tài liệu nghiên cứu và phát triển game trên trình duyệt web với silverlight (Trang 53)

Vấn đề

Trong hầu hết tất cả các ứng dụng trên web đều không đơn thuần xử lý chỉ trên 1 trang chủ duy nhất, đa số 1 trang web phải có nhiều trang thể hiện do đó trong game cũng phải có được nhiều trang thể hiện như vậy, tuy nhiên mặc định ứng dụng silverlight tạo ra chỉ hỗ trợ xủ lý trên một trang duy nhất bằng cách thiết lập thuộc tính RootVisual của lớp App bằng thể hiện của trang cần hiển thị. Sau khi ta đã thiết lập giá trị của thuộc tính RootVisual thì sẽ không thể thay đổi được nữa[1]. Trong game được xây dựng phải có nhiều trang với mỗi trang thực hiện chức năng nào đó trong game như đăng kí game, đăng nhập game, màn hinh chính giao diện của

game…. Vì vậy nhu cầu đầu tiên khi xây dựng ứng dụng dựa trên silverlight đó là tạo ra giao diện hỗ trợ nhiều trang chuyển đổi qua lại giữa với nhau.

Ngoài ra trong ứng dụng nhiều trang ta cần phải quan tâm thêm vấn đề lưu giữ trạng thái của các trang đã tạo ra, đồng thời cũng phải giải quyết việc truyền dữ liệu giữa các trang khi có sự thay đổi trang.

Giải pháp

Như vậy để thực hiện được điều này chúng ta phải sử dụng 1 cơ chế làm việc như trong J2ME là dựng 1 khung treo (có thể là canvas hay grid ) khi trang nào được gọi thì sẽ gán nội dung trang đó vào khung treo này. Và mỗi lần gán vào khung treo thì nội dung của trang vừa được xử lý đều được cache lại trên server. Trước hết ta cần tạo ra một enum liệt kê danh sách các trang có thể chuyển đến.

Tạo ra một trang tên là MasterPage, đây sẽ là trang chứa tất cả các trang sẽ tạo ra. Gồm có các thành phần chính như sau:

public enum Pages

{ SignIn, Register, City, World, … BarrackPage }

public class MasterPage: UserControl

{

Grid _current;

Dictionary<Pages, UserControl> _pagesCache; public void NavigateTo(Pages nextPage);

public void NavigateTo(Pages nextPage, object state); public void ResetToPage(Pages nextPage);

public void ResetToPage(Pages nextPage, object state); }

Biến _current lưu giữ trang hiện tại đang được hiển thị trong thuộc tính Children của mình. Biến _pagesCache lưu lại các trang đã được tạo ra. Hàm NavigateTo

chịu trách nhiệm tạo ra trang cần chuyển đến (nếu cần), sau đó gán vào thuộc tính Children của _current. Hàm ResetToPage sẽ loại bỏ hết các trang đã tạo và chuyển đến trang mới.

Để phục vụ nhu cầu truyền dữ liệu giữa các trang, hai hàm NavigateTo

ResetToPage có hai hàm nạp chồng nhận đối số kiểu object là dữ liệu truyền cho trang mới.

Bất kì trang nào có xử lí đối với dữ liệu truyền qua khi chuyển trang đều phải hiện thực hóa giao diện IStateConsumable.

Để cho việc chuyển trang được đơn giản hóa ta sẽ tạo ra một lớp Switcher có hàm tĩnh là ToResetTo với đối số là trang cần đến, đồng thời thay đổi nội dung hàm Application_Startup trong lớp App như sau:

public interface IStateConsumable

{

void UtilizeState(object state); }

private void Application_Startup(object sender, StartupEventArgs e) {

MasterPage master = new MasterPage(); this.RootVisual = master;

Switcher.MasterPage = master;

Switcher.To(Pages.SignIn); }

public class Switcher

{

public static MasterPage MasterPage; // Gán bên ngoài public static void To(Pages nextPage);

public static void To(Pages nextPage, object state); public static void ResetTo(Pages newNextPage);

public static void ResetTo(Pages newNextPage, object state); }

Một phần của tài liệu nghiên cứu và phát triển game trên trình duyệt web với silverlight (Trang 53)

Tải bản đầy đủ (DOC)

(93 trang)
w