Reputation: 107
My images is definitally moving, but no matter what I do, I can not get it so the image repaints! The GameManger paints the cat, and the form1 passes the paint args and object to gamemanager.
Form1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
public partial class Form1 : Form
{
GameManager myGM = new GameManager();
int dir = 0;
public Form1()
{
InitializeComponent();
newGame();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (this.myGM != null)
this.myGM.paint(e.Graphics);
//e.Graphics.DrawImage(imgMouse.Images[0], pointXMouse, pointYMouse);
//e.Graphics.DrawImage(imgCat.Images[0], 50, 100);
//e.Graphics.DrawImage(imgCheese.Images[0], 75, 100);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
{
dir = 0;
}
if (e.KeyCode == Keys.Right)
{
dir = 1;
}
if (e.KeyCode == Keys.Down)
{
dir = 2;
}
if (e.KeyCode == Keys.Left)
{
dir = 3;
}
}
public void newGame()
{
timer1.Start();
myGM.newGame(imgCat, imgMouse, imgCheese, this);
}
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Refresh();
}
public int getDir()
{
return dir;
}
}
}
GameManager:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
class GameManager
{
Form1 myForm;
Cat ca1 = new Cat();
Mouse m = new Mouse();
Cheese ch = new Cheese();
int amount = 5;
int catdir = 0;
Timer time = new Timer();
public ImageList imgCat = new ImageList();
public ImageList imgMouse = new ImageList();
public ImageList imgCheese = new ImageList();
public void newGame(ImageList cat, ImageList mouse, ImageList cheese, Form1 form)
{
imgCat = cat;
imgMouse = mouse;
imgCheese = cheese;
myForm = form;
time.Start();
}
public void move()
{
ca1.Move(amount, catdir);
m.Move(amount, catdir);
}
public void paint(Graphics g)
{
g.DrawImage(imgCat.Images[0], ca1.getLocation());
}
private void time_Tick(object sender, EventArgs e)
{
move();
getDir();
myForm.Refresh();
}
public void getDir()
{
catdir = myForm.getDir();
}
}
}
Cat:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
class Cat: Moveable
{
Random myCLoc = new Random();
private Moveable myCatMove;
public Point p = new Point(100, 100);
int dir = 0;
public void Move(int n, int d)
{
dir = d;
if (dir == 0)
{
p.Y = p.Y - n;
}
if (dir == 1)
{
p.X = p.X + n;
}
if (dir == 2)
{
p.Y = p.Y + n;
}
if (dir == 3)
{
p.X = p.X - n;
}
}
public void changeDirection()
{
}
public Point getLocation()
{
return p;
}
public void paint(PaintEventArgs e)
{
}
}
}
No matter what I do it will just NOT REPAINT!
Upvotes: 0
Views: 203
Reputation: 107
I had to add time.Tick +=new EventHandler(time_Tick);
to the GameManager constructor, apparently that is how a timer gets connected the time_tick method.
Upvotes: 0
Reputation: 1055
This has always worked for me in PictureBoxes
and other Controls
PictureBox.Refresh();
PictureBox.Update();
OR
PictureBox.Update();
PictureBox.Refresh();
Although I can't remember which
Upvotes: 1
Reputation: 242
Doublecheck if the timer is enabled and PictureBox.Paint event is fired (don't be afraid to use debugger). If it won't help try not to use PictureBox.Paint
event and Refresh
method, but call myGM.paint
directly in Timer.Tick handler
Upvotes: 1