Một số Bối cảnh:Android - Canvas onDraw với phong trào nhân vật zoom camara sau
tôi đang tạo ra một trò chơi Android mà rút ra một mê cung vào một canvas chống lại một hình nền, điều này sử dụng một khối vuông và do đó mê luôn là automtically phóng to hình vuông 5 x 5, của mê cung có thể là 20 x 20. Mê cung được vẽ bằng cách đơn giản chạy qua một tập hợp các vòng lặp và sau đó vẽ các đường ở những vị trí thích hợp. Đây là tất cả hoạt động hoàn hảo, tuy nhiên tôi đang gặp vấn đề với việc onDraw của tôi hoạt động trơn tru. Điều này xảy ra do thực tế là mỗi khi tôi vô hiệu hóa tôi phải chạy lại cho cái nhìn và chạy khác nhau nếu báo cáo để kiểm tra vị trí (không may là quá trình này không thể được cải thiện).
Các Câu hỏi:
Tôi đang tìm để viết lại một cách mê cung của tôi là vẽ lên vải, dưới đây là 3 tính năng chính tôi cần phải thực hiện:
1 - Vẽ toàn bộ mê cung lên canvas (điều này đủ dễ) 2 - Phóng to mê cung sao cho chỉ 5 x 5 được hiển thị 3 - Di chuyển ký tự (người luôn nằm giữa màn hình) và vẽ giây tiếp theo của mê cung
Bây giờ như đã đề cập ở trên vẽ toàn bộ mê cung là dễ dàng đủ và sẽ làm cho onDraw signifcatly nhanh hơn vì họ không cần phải chạy vòng lặp for trên invaldate, nó có thể được thực hiện một lần khi mức đầu tiên được tải lên.
Xét về điểm 2 & 3, cách tôi thấy hoạt động này là charcacter được vẽ ở giữa khung hình, sau đó máy ảnh xem chim cánh cụt 2d được gắn/liên kết với chuyển động của ký tự. Máy ảnh này cũng sẽ cần phải được phóng to đến mức nó chỉ hiển thị 5 x 5 của lưới mê cung tổng thể. Sau đó, khi charcater di chuyển camera di chuyển với nhân vật và hiển thị phần tiếp theo của mê cung đã được vẽ. Tôi đã thử một vài điều và thực hiện một số reasearch tuy nhiên tôi chưa bao giờ làm việc với vải trước và không có ý tưởng thực sự bắt đầu từ đâu và nếu điều này thậm chí có thể.
Vì vậy, để tổng hợp phần chính của câu hỏi là liệu chúng là một cách để liên kết máy ảnh xem chim với một ký tự được phóng to và di chuyển với hình ảnh ký tự.
Dưới đây là một đoạn trích về cách mê cung hiện tại, sử dụng 2 bộ vòng kiểm tra đối với 2 bộ mảng boolean [] [], đơn giản lưu trữ các đường thẳng đứng và đường chéo.
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, 100, background);
RectBackground.set(0,0, FullScreenWidth, FullScreenWidth);
canvas.drawBitmap(gameBackground, null, RectBackground, null);
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
float x = j * totalCellWidth;
float y = i * totalCellHeight;
indexY = i + currentY;
indexX = j + currentX;
// Draw Verticle line (y axis)
if (indexY < vLength && indexX < vLines[indexY].length && vLines[indexY][indexX])
{
RectOuterBackground.set((int)x + (int)cellWidth, (int)y, (int)x + (int)cellWidth + 15, (int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
// Draws Horizontal lines (x axis)
if (indexY < hLength && indexX < hLines[indexY].length && hLines[indexY][indexX])
{
RectOuterBackground.set((int)x, (int)y + (int)cellHeight,(int)x + (int)cellWidth + 15,(int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
}
}
}
tôi cũng nên thêm rằng phương pháp onDraw là woefully không đầy đủ. Nếu bạn cần xem toàn bộ công việc, tôi có thể gửi cho bạn một số mã. Tôi đã viết một ứng dụng làm điều gì đó tương tự như những gì bạn đang làm với mê cung. Nó vẽ các dòng máy tính xách tay và chụp chữ viết tay từ bút stylus. – mttdbrd
Tôi sẽ xem xét điều này vào ngày mai, bạn có thể vui lòng gửi email cho tôi mã hoàn chỉnh của bạn để tôi có thể xem phiên bản đang hoạt động hay không. Cảm ơn. –
Tôi không biết cách gửi email cho mọi người thông qua SO. Làm thế nào để làm điều đó? – mttdbrd