В приведенном ниже подходе все работает нормально, логика обрабатывается программой хорошо, но... Мои изображения она загружает "с фоном". Отображается изображение «доски», а затем изображения «пешек». И эти пешки загружаются вместе с фоном (несмотря на настройку pawn.BackColor = Color.Transparent;)
public partial class Form1 : Form
{
/////fields
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InitializeBoard();
InitializeDice();
InitializeWhosTurnLabel();
InitializePawns();
RunGameLoop();
}
private void InitializeBoard()
{
board.ImageLocation = @"C:\..\board.jpg";
board.SizeMode = PictureBoxSizeMode.StretchImage;
board.Size = new Size(500, 500);
board.Location = new Point(0, 0);
this.Controls.Add(board);
}
private void InitializeDice()
{
dice.Size = new Size(150, 150);
dice.Location = new Point(550, 200);
this.Controls.Add(dice);
diceCount = random.Next(1, 7);
}
private void InitializeWhosTurnLabel()
{
whosTurn.Size = new Size(500, 250);
whosTurn.Location = new Point(550, 10);
this.Controls.Add(whosTurn);
}
private void InitializePawns()
{
allPawns.Add(LoadPawns("blue", 72, 130, 360, 415));
allPawns.Add(LoadPawns("yellow", 418, 360, 360, 415));
allPawns.Add(LoadPawns("green", 418, 360, 70, 125));
allPawns.Add(LoadPawns("red", 72, 130, 70, 125));
// Dodaj pionki do Controls formularza
foreach (var pawns in allPawns)
{
foreach (Pawn pawn in pawns)
{
this.Controls.Add(pawn);
pawn.Click += Pawn_Click;
pawn.BringToFront();
}
}
}
private List
LoadPawns(string color, int x1, int x2, int y1, int y2)
{
List pawns = new List();
Image image = Image.FromFile($@"C:\..\{color}_pawn.png");
for (int i = 0; i < 4; i++)
{
Point location;
switch (i)
{
case 0:
location = new Point(x1, y1);
break;
case 1:
location = new Point(x2, y1);
break;
case 2:
location = new Point(x1, y2);
break;
case 3:
location = new Point(x2, y2);
break;
default:
throw new Exception("Invalid pawn index");
}
Pawn pawn = new Pawn(image, color, location);
pawns.Add(pawn);
}
return pawns;
}
private void Pawn_Click(object sender, EventArgs e)
{
Pawn selectedPawn = (Pawn)sender;
...
}
При таком подходе изображения на самом деле загружаются нормально, но вся логика программы разваливается. Кроме того, когда я нажимаю пешку, ничего не происходит...
В приведенном ниже подходе все работает нормально, логика обрабатывается программой хорошо, но... Мои изображения она загружает "с фоном". Отображается изображение «доски», а затем изображения «пешек». И эти пешки загружаются вместе с фоном (несмотря на настройку pawn.BackColor = Color.Transparent;) [code] public partial class Form1 : Form {
/////fields public Form1() { InitializeComponent(); }
// Dodaj pionki do Controls formularza foreach (var pawns in allPawns) { foreach (Pawn pawn in pawns) { this.Controls.Add(pawn); pawn.Click += Pawn_Click; pawn.BringToFront(); } } }
private List LoadPawns(string color, int x1, int x2, int y1, int y2) { List pawns = new List(); Image image = Image.FromFile($@"C:\..\{color}_pawn.png");
for (int i = 0; i < 4; i++) { Point location; switch (i) { case 0: location = new Point(x1, y1); break; case 1: location = new Point(x2, y1); break; case 2: location = new Point(x1, y2); break; case 3: location = new Point(x2, y2); break; default: throw new Exception("Invalid pawn index"); } Pawn pawn = new Pawn(image, color, location);
... } [/code] При таком подходе изображения на самом деле загружаются нормально, но вся логика программы разваливается. Кроме того, когда я нажимаю пешку, ничего не происходит... [code]namespace ludo_game { public partial class Form1 : Form {
/////fields
public Form1() { InitializeComponent(); this.Load += new EventHandler(Form1_Load); }
private List LoadPawns(string color, int x1, int x2, int y1, int y2) { List pawns = new List(); Image image = Image.FromFile($@"C:\..\{color}_pawn.png");
for (int i = 0; i < 4; i++) { Point location; switch (i) { case 0: location = new Point(x1, y1); break; case 1: location = new Point(x2, y1); break; case 2: location = new Point(x1, y2); break; case 3: location = new Point(x2, y2); break; default: throw new Exception("Invalid pawn index"); } Pawn pawn = new Pawn(image, color, location); pawns.Add(pawn); }
return pawns; }
private void Board_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; foreach (var pawnList in allPawns) { foreach (var pawn in pawnList) { g.DrawImage(pawn.Image, new Rectangle(pawn.Location, new Size(10, 16))); } } }
У меня есть изображение в формате PNG без фона и с альфа-каналом. Несмотря на pawn.BackColor = Color.Transparent;, фон все еще существует. О чем речь?
Вот весь мой код:
///
namespace ludo_game
{
public partial class Form1 : Form
{
public Form1()
{...
Я только начинаю программировать, даже основ плохо знаю. Пытаюсь создать приложение из своих собственных ресурсов, и все они более или менее прозрачны. Мне удалось создать окно, в котором фоновое изображение прозрачно, поэтому я могу сохранить...
Я только начинаю программировать, даже основ плохо знаю. Пытаюсь создать приложение из своих собственных ресурсов, и все они более или менее прозрачны. Мне удалось создать окно, в котором фоновое изображение прозрачно, поэтому я могу сохранить...
When I run the program, the window (top right and bottom left) is supposed to be transparent but instead, it is black
Here is an image of a lilac window, with a grey line around the bottom and right edge, black, opaque squares on the bottom left and...