duce
JGO n00b  Posts: 47
|
 |
«
on:
2011-09-13 06:47:13 » |
|
I have just finished the mouse input for my game. My "player" sprite will always look at the mouse position. I am now trying to set up a zoom and translate to center the "player" sprite. I want to have it so when the sprite moves, it will stay exactly center in the frame. I sort of have one working, but when I start moving around, the mouse part gets all screwed up. Also, I can't get it perfectly centered in the frame. Is there some kind of formula, or do I have to eye it out.
Edit: Solved!
My old atan2 function used the center of the sprite minus the mouse position to get the rotation. It worked fine when it was in the center, but when I moved around with the sprite, it got messed up. My new atan2 function uses the center of the screen (400 x 300 in my case) minus the mouse points to get the rotation. Works fine now.
|
|
|
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #1 on:
2011-09-13 09:31:49 » |
|
I'm guessing the problem is the offset, but we would need some more info or pics or vids or whatever
hard to guess whats wrong, if you only say "it gets screwed up" =D
|
|
|
|
|
|
Games published by our own members! Go get 'em!
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #3 on:
2011-09-13 15:24:17 » |
|
yeah its exactly what I said, you need to add/subtract the camera position from the calculation
the sprites location should absolute, the camera moves and the mouse location is local... so whenever you have mouseX and mouseY you have to add the camera/offset x and y
|
|
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #4 on:
2011-09-13 15:31:17 » |
|
maybe clearer: when you use the mouse location values, you have to use the mouse's absolute position on the map, not local position on the screen
and that is camera.x + local mouse position.x and y the same
|
|
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #5 on:
2011-09-13 15:50:45 » |
|
How do I get absolute positioning compared to screen positioning?
|
|
|
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #6 on:
2011-09-13 16:46:43 » |
|
How do I get absolute positioning compared to screen positioning?
and that is camera.x + local mouse position.x and y the same
|
|
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #7 on:
2011-09-13 19:45:11 » |
|
What do I use for camera.x? I tried getting the x in g.translate(x, y), but that just messed it up completely.
|
|
|
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #8 on:
2011-09-13 20:08:44 » |
|
so you are using g translate in this example huh
well that value that you have translated g in total plus or minus you have to add to mouse
|
|
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #9 on:
2011-09-13 20:13:32 » |
|
Okay, I will. so you are using g translate in this example huh So, there is another way of doing it? g.translate() is the only way I know how.
|
|
|
|
|
Games published by our own members! Go get 'em!
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #10 on:
2011-09-13 21:55:24 » |
|
Ah, works now. Still, is there a better way than g.translate() that I should know about?
|
|
|
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #11 on:
2011-09-14 08:03:43 » |
|
Well thats not really how I would do it.
all my objects have absolute locations on the map
then you have a camera, which is just a rectangle with the size of the screen you move the player and adjust the camera to look at the player
now at rendering you render everything with that camera.
first, to not render stuff that wouldn't be on the screen, you say, well is the object inside the camera basically camera.intersects(object) and for every object that is, you render it with its absolute location minus the camera's location
It's just a concept that came to me naturally and I have been using it every since, it's not a way I read somewhere - but it might be the same or very similar to "what you're supposed to do"
anyway, using this you can also have parallax scrolling with layers and different cameras easily, as well as scenes in which the camera would look/shift to something other than the player
|
|
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #12 on:
2011-09-14 14:41:58 » |
|
That is interesting, but how do you make it so the screen is only inside the rectangle.
|
|
|
|
|
R.D.
Full Member   Posts: 122 Medals: 2
"For the last time, Hats ARE Awesome"
|
 |
«
Reply #13 on:
2011-09-14 14:45:21 » |
|
in Slick? setClip on the given Graphics object inside a render method 
|
|
|
|
Cero
JGO Neuromancer     Posts: 1050 Medals: 18
|
 |
«
Reply #14 on:
2011-09-14 16:48:29 » |
|
in Slick? setClip on the given Graphics object inside a render method  never used that. Like I said, every object/sprite is rendered at absolute location minus camera location
|
|
|
|
R.D.
Full Member   Posts: 122 Medals: 2
"For the last time, Hats ARE Awesome"
|
 |
«
Reply #15 on:
2011-09-14 20:57:20 » |
|
Me too, at least not for camera issues  (More like split screen stuff or for my map editor)
|
|
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #16 on:
2011-09-14 21:19:44 » |
|
So the rectangle follows the camera, not vice versa?
|
|
|
|
|
duce
JGO n00b  Posts: 47
|
 |
«
Reply #17 on:
2011-09-14 23:13:45 » |
|
I think I get it now, I was in a completely different mindset. I was focused on the canvas moving around, instead of the objects moving around dynamically to the "camera". Thanks for the tips, I'll see how it works.
|
|
|
|
|
gimbal
Full Member   Posts: 188 Medals: 11
|
 |
«
Reply #18 on:
2011-09-19 05:28:28 » |
|
Its easier to visualize if you have a real world example. Remember Warcraft 2? You have the large map and the minimap. On this minimap you see a rectangle which you can move around to see that part of the larger map. http://www.allvideo.org/pictures/warcraft/warcraft2_screenshot1.jpgThe minimap is your entire world, the 'main game area' is your canvas.
|
|
|
|
|
sproingie
JGO Strike Force    Posts: 899 Medals: 55
|
 |
«
Reply #19 on:
2011-09-19 12:51:21 » |
|
The rectangle in the minimap still perpetuates the "camera" idea. Imagine the minimap rectangle is stuck in the center of the minimap, and the entire map scrolls to fit the visible part within that rectangle. That's how the camera works: your camera never moves, you simply move the whole world into view. Then you will see that it is not the spoon that bends, but yourself 
|
|
|
|
|
gimbal
Full Member   Posts: 188 Medals: 11
|
 |
«
Reply #20 on:
2011-09-20 09:33:27 » |
|
The rectangle in the minimap still perpetuates the "camera" idea. Imagine the minimap rectangle is stuck in the center of the minimap, and the entire map scrolls to fit the visible part within that rectangle. That's how the camera works: your camera never moves, you simply move the whole world into view. Then you will see that it is not the spoon that bends, but yourself  Yes thats how the OP is currently doing it, right? Translate everything in the entire world. But the idea posed in the thread is to not move the entire world but to move the camera rectangle. The latter matches the minimap example.
|
|
|
|
|
sproingie
JGO Strike Force    Posts: 899 Medals: 55
|
 |
«
Reply #21 on:
2011-09-20 13:46:03 » |
|
Another way of thinking about it is you move the minimap rectangle internally, but to actually render things into view you translate (move) it and the world back in the reverse direction so it's back at the center where your fixed unmoving camera lives.
In that case, the camera, such as it is, is like any other object in the world, except you always render it first and you use the inverse of the normal translation and rotation to get your camera transform on the world.
|
|
|
|
|
|