forked from karx/catbox
fix flickering and add movement
This commit is contained in:
parent
056f470a82
commit
7d41502e9e
22
src/lib.rs
22
src/lib.rs
|
@ -71,7 +71,7 @@ impl Iterator for Events {
|
||||||
|
|
||||||
pub struct Sprite {
|
pub struct Sprite {
|
||||||
rect: Rect,
|
rect: Rect,
|
||||||
surf: Surface<'static>
|
surf: Surface<'static>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Sprite {
|
impl Sprite {
|
||||||
|
@ -84,11 +84,14 @@ impl Sprite {
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
rect: dest_rect,
|
rect: dest_rect,
|
||||||
surf
|
surf,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw(&self, canvas: &mut Canvas<Window>, events: &Events) -> Result<()> {
|
pub fn draw(&self, canvas: &mut Canvas<Window>, events: &Events) -> Result<()> {
|
||||||
|
canvas.fill_rect(None)?;
|
||||||
|
canvas.clear();
|
||||||
|
|
||||||
let mut surface = canvas.window().surface(events.as_ref())?;
|
let mut surface = canvas.window().surface(events.as_ref())?;
|
||||||
|
|
||||||
self.surf.blit(None, &mut *surface, self.rect)?;
|
self.surf.blit(None, &mut *surface, self.rect)?;
|
||||||
|
@ -97,6 +100,14 @@ impl Sprite {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn translate(&mut self, position: (i32, i32)) {
|
||||||
|
let new_x = self.rect.x() - position.0;
|
||||||
|
let new_y = self.rect.y() - position.1;
|
||||||
|
|
||||||
|
self.rect.set_x(new_x);
|
||||||
|
self.rect.set_y(new_y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Game {
|
pub struct Game {
|
||||||
|
@ -127,18 +138,21 @@ impl Game {
|
||||||
|
|
||||||
let mut canvas = window.into_canvas().build()?;
|
let mut canvas = window.into_canvas().build()?;
|
||||||
|
|
||||||
let mut event_pump = sdl_context.event_pump()?;
|
let event_pump = sdl_context.event_pump()?;
|
||||||
|
|
||||||
let mut events = Events {
|
let mut events = Events {
|
||||||
pump: event_pump
|
pump: event_pump
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
if self.stopped.get() {
|
if self.stopped.get() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
canvas.set_draw_color(Color::RGB(0, 0, 0));
|
||||||
|
canvas.clear();
|
||||||
func(&mut canvas, &mut events);
|
func(&mut canvas, &mut events);
|
||||||
canvas.present();
|
// canvas.present();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
14
src/main.rs
14
src/main.rs
|
@ -4,7 +4,7 @@ fn main() {
|
||||||
let game = Game::new("catbox demo", 1000, 800);
|
let game = Game::new("catbox demo", 1000, 800);
|
||||||
|
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
let s = Sprite::new("/home/yashkarandikar/code/catbox/duck.png", 500, 400).unwrap();
|
let mut s = Sprite::new("/home/yashkarandikar/code/catbox/duck.png", 500, 400).unwrap();
|
||||||
game.run(|canvas, event_pump| {
|
game.run(|canvas, event_pump| {
|
||||||
i = (i + 1) % 255;
|
i = (i + 1) % 255;
|
||||||
// canvas.set_draw_color(catbox::Color::RGB(i, 64, 255));
|
// canvas.set_draw_color(catbox::Color::RGB(i, 64, 255));
|
||||||
|
@ -22,6 +22,18 @@ fn main() {
|
||||||
keycode: Some(Keycode::Escape),
|
keycode: Some(Keycode::Escape),
|
||||||
..
|
..
|
||||||
} => game.terminate(),
|
} => game.terminate(),
|
||||||
|
|
||||||
|
Event::KeyDown { keycode, .. } => {
|
||||||
|
let offset = match keycode.unwrap() {
|
||||||
|
Keycode::W | Keycode::Up => (0, 5),
|
||||||
|
Keycode::S | Keycode::Down => (0, -5),
|
||||||
|
Keycode::A | Keycode::Left => (-5, 0),
|
||||||
|
Keycode::D | Keycode::Right => (5, 0),
|
||||||
|
_ => (0, 0)
|
||||||
|
};
|
||||||
|
|
||||||
|
s.translate(offset);
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue