2013-03-05 21 views
12

Tôi đang lên kế hoạch tạo ứng dụng dành cho máy tính bảng. Tôi sẽ yêu cầu một số hướng dẫn.Sử dụng các tệp SVG với libgdx

Tôi có hình ảnh ở định dạng SVG như this one.

Với SVG thật dễ dàng, bạn chỉ cần thay đổi thông số tô màu thành màu khác nhau nhưng theo tôi hiểu, không có chế độ svg dễ sử dụng/ổn định để sử dụng với libgdx. Tôi vẫn muốn sử dụng tệp svg để tạo/lưu trữ hình ảnh cho ứng dụng của mình.

  • Bạn sẽ giới thiệu con đường xử lý nào?
  • Có cách nào dễ dàng để chuyển đổi đường dẫn/hình dạng svg cho các đối tượng com.badlogic.gdx.math.bezier hoặc đa giác và sau đó vẽ chúng trên màn hình/lấy đầu vào của người dùng (nhấn) bên trong hình dạng này không?
  • Hoặc tôi có nên sử dụng các đối tượng/đường dẫn khác nhau không?

Các hình dạng có thể được nhóm lại với nhau, ví dụ tôi muốn hai cửa sổ trong một ngôi nhà để thay đổi màu sắc cùng một lúc.

+0

Tôi không chắc chắn những gì bạn đang cố gắng hoàn thành, nhưng có rất nhiều cách để chuyển đổi dữ liệu đường dẫn sang các cấu trúc dữ liệu khác. Nhưng về nguyên tắc tất cả những gì tôi có thể nói là cấu trúc dữ liệu đường dẫn svg là đơn giản để phân tích cú pháp và dễ hiểu. có một cái nhìn ở đây: http://www.w3.org/TR/SVG/paths.html#PathData viết một trình phân tích cú pháp cho điều này thực sự không khó và với nó bạn có thể đưa vào mọi khuôn khổ ... – philipp

+0

Tôi chỉ cố gắng vẽ một bức tranh và sau đó tô màu nó bằng cách chạm vào các hình dạng bên trong. Tôi biết cách phân tích cú pháp SVG nhưng tôi không chắc chắn các đối tượng libgdx nào tôi nên sử dụng như là kết quả của loại ứng dụng này. cảm ơn! – Robert

Trả lời

9

Cách LibGDX được viết là nó cung cấp cho bạn một cách cấp thấp hơn để thực hiện loại kết xuất này, nhưng không cung cấp cách nào để hiển thị SVG. Nó thực sự phụ thuộc vào nếu bạn đang tìm kiếm một cái gì đó với hiệu suất hoặc chỉ đơn giản là muốn nó để vẽ hình dạng cơ bản.

Để chỉ hiển thị hình dạng, bạn có thể sử dụng thứ gì đó như ShapeRenderer. Cung cấp cho bạn một giao diện rất gần với cách Java2D để vẽ mọi thứ. Có lẽ để nhanh chóng rút ra một số công cụ cơ bản này có thể là tiện dụng.

Nếu bạn muốn thực hiện một số phiên bản hiển thị mạnh mẽ hơn, có thể bạn sẽ muốn xem xét sử dụng Mesh và làm việc với trình tạo bóng cho OpenGL ES. Bạn có thể tìm thấy các ví dụ về số này trong số LibGDX tests cũng như tìm kiếm trực tuyến để biết các ví dụ/hướng dẫn.

Nếu bạn muốn biến SVG thành kết cấu, bạn sẽ muốn xem Pixmap và sau đó bạn có thể tạo họa tiết với kết cấu và hiển thị bằng Spritebatch. Bạn sẽ cần phải viết các pixel bạn muốn tô màu và như vậy với Pixmap. Tuy nhiên, làm theo cách này sẽ tạo ra một kết cấu không được quản lý (tức là bạn sẽ phải xây dựng lại nó khi người dùng quay lại ứng dụng sau khi nhấn lại hoặc đặt thiết bị để ngủ).

+1

Cảm ơn. Tôi không nghĩ rằng tôi cần nhiều tốc độ - nhưng nếu tôi hiểu chính xác ShapeRenderer không cho phép vẽ đường cong bezier? Ngoài ra, điều quan trọng là bạn có thể dễ dàng điền vào các hình dạng này với các màu khác nhau - vì vậy các hình ảnh thu nhỏ có lẽ không hữu ích? Bây giờ tôi chỉ cần biết nếu nó có thể với mắt lưới :) – Robert

+0

Lưới chỉ là một sự trừu tượng mức cao của OpenGL VBO. Nếu bạn cảm thấy thoải mái với VBO thì nó sẽ khá thẳng về phía trước. Thách thức thực sự là phải mã hóa các thuật toán để tạo hình tam giác cho các hình dạng/dòng/v.v. – Jyro117

+0

Ok, vì vậy tôi đã thực hiện một số thử nghiệm và có vẻ như tôi có thể nhập khẩu mắt lưới từ máy xay sinh tố (nhập SVG vào máy xay sinh tố, chuyển thành lưới, xuất sang g3dt, chuyển sang ứng dụng, tạo tệp StillModel từ tệp). Vấn đề là tôi không thể nắm được cách hiển thị nó trên màn hình. Đôi khi nó điền vào tất cả các xem, đôi khi nó chỉ là một dòng nhỏ (tôi thay đổi màu sắc của nó để xem nó). Nếu tôi cố gắng sử dụng máy ảnh - mọi thứ biến mất ... Quy tắc đặt vị trí lưới được nhập vào máy ảnh là gì? Hoặc tôi nên làm bằng cách nào đó làm điều đó trong máy xay sinh tố TRƯỚC KHI xuất khẩu? – Robert