Обьясни, что ты подразумеваешь под 'плохо'.пробовал все время перерисовывать получается плохо.
Речь идет о рисовании в Bitmap. Этот битмэп присваиваешь свойству панели "BackgroundImage". Обьект Graphics создаешь не из панели, а из битмэпа. При этом, нужда в событии Paint отпадает.Прочитал, что нужно рисовать "в память", но там в примере все по другому
Обьясни, что ты подразумеваешь под 'плохо'.
Nord777 писал(а):Обьясни подробнее, зачем нужны слои и прозрачность в них.
Совсем необязательно (и даже вредно) городить для этого полупрозрачные пбоксы.Например:
1- слой это просто тайлы карты
2- персонаж, враги, NPC
3- Специальные объекты
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myBitmap As New Drawing.Bitmap(32, 32)
Dim myGraphics As Drawing.Graphics = Graphics.FromImage(myBitmap)
'прямая линия начиная с 15 пикселя с верху до левого угла размером 32 пикселя
'черного цвета, толщиной 2 пикселя
Dim myPen As New System.Drawing.Pen(Color.Black, 2)
myGraphics.DrawLine(myPen, 0, 15, 32, 15)
'линия синего цвета, проходящая по-диоганали с верхнего
'левого угла в нижний правый размером 32 пискселя
myGraphics.DrawLine(Pens.Blue, 0, 0, 32, 32)
'линяя красного цвета, проходящая по-диоганали с нижнего
'левого угла в верхний правый угол размером 32 пискселя
myGraphics.DrawLine(Pens.Red, 0, 32, 32, 0)
'круг зеленого цвета
myGraphics.DrawEllipse(Pens.DarkGreen, 0, 0, 32, 32)
'квадрат цветом Aqua
myGraphics.DrawRectangle(Pens.Aqua, 2, 2, 28, 28)
'вставляем данные в Form
Me.BackgroundImage = myBitmap
End Sub
Nord777 писал(а):Я не могу понять, что именно тебе непонятно. Но возникло подозрение, что непонятно всё.
Проблемы с созданием битмэпа нужных размеров?
Проблемы с созданим обьекта графикс из созданного битмэпа?
Проблемы с массивами?
Проблемы с самой концепцией?
http://www.pmg.org.ru/galaxy2d/index.html
http://www.pmg.org.ru/galaxy2d/tilefaq.htm
А как делать все это с BitMap
Private Sub panelMap_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panelMap.MouseClick
Dim xMap, yMap As Integer
Dim img As Image
xMap = Int(e.X / cellSize)
yMap = Int(e.Y / cellSize)
'g = panelMap.CreateGraphics()
g = Graphics.FromImage(myBitmap)
Try
img = Image.FromFile(Application.StartupPath + "\images\" + nameCollectionT + "\" + val)
g.DrawImage(img, xMap * cellSize, yMap * cellSize)
field(xMap, yMap) = Replace(val, ".png", "")
Catch ex As Exception
MsgBox("Не выбран тайл!", MsgBoxStyle.Critical, "Ошибка!")
End Try
panelMap.Refresh()
End Sub
Вообщем сделал по описанию, но приходится в конце panelMap.Refresh() делать, так как не выдно что нарисовал и все обновляется и моргает. Может есть другой способ?
Public Class myPanel
Inherits Panel
Private Sub myPanel_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
Me.DoubleBuffered = True
End Sub
End Class
Не надо при каждом клике или отрисовке считывать картинку с диска, загрузи заранее.
- Код: Выделить всё
img = Image.FromFile(Application.StartupPath + "\images\" + nameCollectionT + "\" + val)
Эту строку вообще не понял.
- Код: Выделить всё
field(xMap, yMap) = Replace(val, ".png", "")
зацени метод
- Код: Выделить всё
panelMap.Refresh()
Private Sub panelMap_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panelMap.MouseClick
Dim rc As Drawing.Rectangle
Dim xMap, yMap As Integer
Dim img As Image
xMap = Int(e.X / cellSize)
yMap = Int(e.Y / cellSize)
g = Graphics.FromImage(myBitmap)
rc.Size = New System.Drawing.Size(cellSize, cellSize)
rc.Location = New System.Drawing.Point(xMap * cellSize, yMap * cellSize)
Try
img = Image.FromFile(Application.StartupPath + "\images\" + nameCollectionT + "\" + val)
g.DrawImage(img, xMap * cellSize, yMap * cellSize)
field(xMap, yMap) = Replace(val, ".png", "")
Catch ex As Exception
MsgBox("Не выбран тайл!", MsgBoxStyle.Critical, "Ошибка!")
End Try
panelMap.Invalidate(rc)
End Sub
field(xMap, yMap) = Replace(val, ".png", "")
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1