Создание редактора карт (Вопрос)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Создание редактора карт (Вопрос)

Сообщение SlaDER » 10.11.2007 (Сб) 23:11

Привет всем! Щас пишу редактор карт для J2me игры. Смысл такой, например слева панель на которой находятся тайлы карты (Трава, деревья и т.д.) Остальную часть экрана занимает карта. Сначала кликаем на панели с тайлами на нужный объект, потом на место в карте, где будет.

Код: Выделить всё

Dim index As Integer=1
            For i = 0 To fieldWidth
                For j = 0 To fieldHeigth
                    npb = New System.Windows.Forms.PictureBox
                    With npb
                        .Visible = True
                        .Left = j * pSize
                        .Top = i * pSize
                        .Width = pSize
                        .Height = pSize
                        .BorderStyle = BorderStyle.FixedSingle
                        .BackColor = System.Drawing.Color.SkyBlue
                        .SizeMode = PictureBoxSizeMode.StretchImage
                        .Name = "pb" & index
                    End With
                    AddHandler npb.Click, AddressOf pbClick
                    pMap.Controls.Add(npb)
                Next
            Next


Получается, что на каждый тайл создается PictureBox. Если карта маленькая (например 20х20), то все нормально, но вот при размерах в 255х255, уже заметно тормозит.

Можно ли сделать 1 PictureBox и в него добавлять уже тайлы или вообще как это делают то в редакторах?

P.S. Пример редактора в аттаче
Вложения
Editor.rar
Пример редактора
(23.45 Кб) Скачиваний: 80

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 11.11.2007 (Вс) 10:43

:shock:
А просто добавлять эты тайлы (в смысле рисовать в одном пиктуребоксе нельзя?

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.11.2007 (Вс) 13:24

SlaDER
Насколько я понимаю здесь можно обойтись и без PictureBox. Попробуй метод DrawImage...
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 11.11.2007 (Вс) 18:21

С методом DrawImage разобрался. Есть вопрос, вот например нарисую на форме картинки этим методом, а можно ли к ним обратится. Ну например, как поменять уже отрисованную картинку просто сверху нарисовать новую?

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.11.2007 (Вс) 18:29

Да. А вот сохранить получившееся изображение всей карты сложно будет... Я не знаю можно ли как-то по-другому, но я когда-то делал скриншот необходимой области. Если понадобится - я могу выложить код.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 11.11.2007 (Вс) 19:07

чего ж тут сложного?


private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
pictureBox1.BackColor = Color.White;
e.Graphics.DrawString("Hello world", this.Font, new SolidBrush(Color.Green), new PointF(10, 10));
Bitmap b = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(b, pictureBox1.Bounds);
b.Save(@"c:\mybitmap.bmp");
}

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 11.11.2007 (Вс) 19:39

Спасибо! Есть еще вопрос, про слои. Как они тут организовываются в (GDI+)? Например Сетка, должна быть поверх всего и DrawImage должны рисоваться под неё.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 11.11.2007 (Вс) 19:58

Лично я не знаю как работать со Слоями, и думаю, что это достаточно геморное занятие, не если тебе это нужно только ради сетки, могу предложить нехитрый изврат :D


frmGrid.FormBorderStyle = none
frmGrid.TransparecyKey = Black;
frmGrid.BackColor = Black;
private void frmGrid_Paint(object sender, PaintEventArgs e)
{
for (int x = 0; x < this.Width; x += 20)
{
e.Graphics.DrawLine(new Pen(Color.DarkGray), x, 0, x, this.Height);
}
for (int y = 0; y < this.Width; y += 20)
{
e.Graphics.DrawLine(new Pen(Color.DarkGray), 0, y, this.Width, y);
}
}


public partial class Form1 : Form
{
frmGrid grid = new frmGrid();
public Form1()
{
InitializeComponent();
grid.Show();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawString("Hello world", this.Font, new SolidBrush(Color.Green), new PointF(10, 10));
}

private void Form1_Move(object sender, EventArgs e)
{

Point p = new Point(pictureBox1.Location.X + this.Location.X+3, pictureBox1.Top + this.Location.Y + 23);
grid.Location = p;
grid.Size = pictureBox1.Size;
grid.Owner = this;
}
}


понятно изложил суть изврата?

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.11.2007 (Вс) 20:16

2Ramzes
Я не знал про DrawToBitmap... Я хотел предложить автору сделать скрин через API и клиетскую систему координат. :D Спасибо за пояснение!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 16.11.2007 (Пт) 8:22

Еще возник вопрос, вот если я рисую например на Form drawImage, то даже если поставить AutoScroll, все равно Scroll не появляется и что тогда делать если карту будет размера больше чем Form, Panel. Как можно просчитать scroll?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 16.11.2007 (Пт) 12:16

если я правильно понял проблему
Вложения
PaintScrollExmpl.rar
пример
(29.1 Кб) Скачиваний: 86


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 104

    TopList