2012-03-19 40 views
11

Đây sẽ là một trong những câu hỏi khó xử tìm kiếm câu trả lời có thể không tồn tại, nhưng ở đây sẽ xảy ra.Corona SDK Cross Device Độ phân giải màn hình

Tôi đã phát triển một số trò chơi đơn giản bằng cách sử dụng Corona và chức năng dường như hoạt động khá tốt trên hầu hết các thiết bị vật lý mà tôi đã thử nghiệm, vấn đề chính là bố cục. Tôi biết bạn không thể thực sự xây dựng cho mọi thiết bị một cách hoàn hảo, nhưng tôi tự hỏi liệu có một phương pháp phổ biến để làm cho một ứng dụng trông đẹp trên nhiều màn hình nhất có thể không. Tôi có quyền truy cập vào các thiết bị

  • iPad 1 & 2: 4: 3 (1,33)
  • iPhone 960 × 640 3: 2 (1,5)
  • iPhone 480x320 3: 2 (1,5)
  • Galaxy Nexus 16: 9 (1.77)

Từ những gì tôi thấy, mọi người muốn sử dụng độ phân giải 320x480 và sau đó cho phép Corona nâng cao độ phân giải thiết bị (với bất kỳ @ 2x hình ảnh nào theo yêu cầu) nhưng điều này dẫn đến hộp chạy chữ hoặc cắt xén tùy thuộc vào t thiết lập quy mô config.lua. Trong khi nó quy mô một cách chính xác, có một letterbox không phải là tuyệt vời.

Vì vậy, tốt nhất tôi không chỉ định chiều cao & chiều cao trong tệp cấu hình, nhưng thay vào đó hãy sử dụng một số loại kiểm tra màn hình trước để tìm tỷ lệ cỡ ảnh 1.33/1.5/1.77? Chắc chắn với toàn bộ điểm của Corona SDK, sẽ có một loại thiết lập 'điển hình' mà các nhà phát triển sử dụng cho sự khởi đầu của bất kỳ dự án mới nào?

Cảm ơn bạn

Trả lời

8

Dường như tôi đã tìm thấy một giải pháp khá tốt dựa trên bài diễn đàn này trên trang web Ansca: http://developer.anscamobile.com/forum/2012/03/12/understanding-letterbox-scalling

Nói tóm lại, config.lua sẽ trông như thế này:

application = { 
    content = { 
     width = 320, 
     height = 480, 
     scale = "letterbox", 
     xAlign = "center", 
     yAlign = "center", 
     imageSuffix = { 
     ["@2x"] = 2, 
    }, 
    } 
} 

Tạo hình nền ở 360 * 570 cho các thiết bị cũ hơn. Màn hình 320x480 sẽ cắt hình ảnh một chút và nó sẽ có kích thước độc đáo cho các thiết bị Android cũ hơn.

Tạo hình nền ở 1140 * 720 cho iPad và iPhone võng mạc - một lần nữa những điều này sẽ mở rộng trên Android và hơi bị cắt trên iOS.

Như một ví dụ, nơi bạn thường sẽ tạo ra một hình ảnh 320x480 và hiển thị nó với:

local bg = display.newImageRect("bg.png",320x480) 
bg.x = display.contentWidth/2 
bg.y = display.contentHeight/2 

.. thay vì tạo ra một nền 360x570 và sử dụng đoạn mã sau:

local bg = display.newImageRect("bg.png",360x570) 
bg.x = display.contentWidth/2 
bg.y = display.contentHeight/2 

Đây là chỉ là một bản tóm tắt, vì vậy hãy kiểm tra liên kết để được hướng dẫn chi tiết hơn.

3

Vâng, bạn CÓ THỂ sử dụng một số hơi tắt 2 để mở rộng nếu bạn muốn hình ảnh chính xác cho các thiết bị khác nhau. Ví dụ:

application = 
{ 
    content = 
    { 
     width = 640, 
     height = 960, 
     scale = "zoomEven", 
     imageSuffix = 
     { 
      ["-iphone3"] = 0.5, 
      ["-ipad2"] = 1.066, 
      ["-ipad3"] = 2.133, 
     }, 
    } 
} 

Trong đó "background.png" sẽ là một hình ảnh 640x960 cho iphone4, trong khi "background-iphone3.png" sẽ là 320x480 (bạn không cần điều này, nhưng nó sẽ làm giảm yêu cầu bộ nhớ cho các ứng dụng iphone3). "background-ipad3.png" sẽ cần phải là 1536x2048 (và một nửa cho -ipad2).

Tất nhiên, nó không giải quyết được tỷ lệ khung hình cho việc định vị màn hình, nhưng nó giải quyết nó cho tất cả các vấn đề liên quan đến gfx khác. Hãy nhớ sử dụng display.newImageRect, không hiển thị.newImage hoặc bạn sẽ không thấy bất kỳ sự khác biệt nào.