Một thanh cuộn khá đơn giản là "khung nhìn ảo" đẩy các ô / đối tượng mới theo hướng bạn đang cuộn.
Ví dụ đơn giản để thấy điều này, là xây dựng một marquee 1 dòng đơn giản (textcroller).
Cho phép mục đích ví dụ nói rằng chúng ta có một dòng có 20 ký tự / chữ cái / ký tự.
Chúng tôi đặt chúng trong một chuỗi / mảng như:
String viewport = "....................";
String text = "Hello World (how original!)";
Bây giờ nếu chúng ta in cái này, chúng ta sẽ chỉ thấy "dấu chấm".
Console.WriteLine(viewport);
Bây giờ để cuộn nó, chúng ta cần làm cho các dấu chấm ở bên trái. Vì vậy, chúng ta có thể đọc văn bản đến.
Để điều này xảy ra, chúng tôi xóa chữ cái đầu tiên từ bên trái và thêm chữ cái tiếp theo được hiển thị từ bên phải.
vì vậy chúng tôi nói:
viewport = viewport.Substring(2);
để lấy chữ cái thứ 2 và chuyển tiếp bằng với phần còn lại của nội dung xem hiện tại.
Bây giờ khung nhìn là 1 char / chữ cái để thu hẹp, vì vậy chúng ta cần thêm char tiếp theo từ thanh cuộn. Do đó, chúng ta cần một biến để kiểm soát vị trí của chúng ta trong cuộn giấy.
// place this outside your scroll loop
int scrollPos =0;
Bây giờ với chỉ số này, chúng ta có thể tìm thấy nhân vật tiếp theo.
char next = text.substring(scrollPos,1);
Sau đó thêm phần này vào khung nhìn.
viewport += next;
Và tăng vị trí của bạn trong cuộn giấy.
scrollPos++;
Bây giờ chúng tôi đã cuộn nội dung 1 char còn lại.
Tiếp tục làm điều này nhiều lần, và nó sẽ trông giống như "Hello World" đang cuộn trên khung nhìn của bạn.
Bây giờ hãy tưởng tượng thủ thuật này theo mọi hướng. Thay vì các ký tự, bạn sử dụng "Gạch" của riêng bạn. Thứ hai, để làm cho nó hoạt động trơn tru, bạn cũng thêm một "cuộn pixel" trong bộ cuộn của bạn hoặc bạn chỉ cần nhiều cuộn của bạn để đơn giản. Sau đó, khi bạn cần tìm ra ô nào sẽ thêm tiếp theo, sau đó chỉ cần chia cuộn giấy hiện tại của bạn với chiều rộng của ô, sau đó bạn biết nếu bạn cần di chuyển nội dung cuộn của chế độ xem theo bất kỳ hướng nào.
nếu bạn cần cuộn các mảng (với dữ liệu khối / khối), bạn có thể thực hiện với các vòng lặp đơn giản.
cuộn trái
for (int pos=0;pos<viewwidth;pos++)
{
tilemap[pos] = tilemap[pos+1];
}
tilemap[width] = newTile; // from maparray.
Phù
Đó là một lời giải thích dài. Bạn có hiểu quan điểm của tôi ở đây, hoặc bạn cần giải thích thêm?