Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  [Solved] Slick 2D Game Scaling and Rotating Problems  (Read 2464 times)
0 Members and 1 Guest are viewing this topic.
Offline 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.
Offline 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

Offline duce

JGO n00b
*

Posts: 47



« Reply #2 on: 2011-09-13 15:04:18 »

http://www.youtube.com/watch?v=F_meSUVsoGQ

The first part shows the way it's supposed to be, then it shows the corners, where it gets messed up.
Games published by our own members! Go get 'em!
Offline 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

Offline 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

Offline duce

JGO n00b
*

Posts: 47



« Reply #5 on: 2011-09-13 15:50:45 »

How do I get absolute positioning compared to screen positioning?
Offline 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?
Quote
and that is camera.x + local mouse position.x  and y the same

Offline 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.
Offline 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

Offline duce

JGO n00b
*

Posts: 47



« Reply #9 on: 2011-09-13 20:13:32 »

Okay, I will.
Quote
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!
Offline 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?
Offline 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

Offline 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.
Offline 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 Smiley

Offline 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 Smiley

never used that.

Like I said, every object/sprite is rendered at absolute location minus camera location

Offline 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 Wink

(More like split screen stuff or for my map editor)

Offline duce

JGO n00b
*

Posts: 47



« Reply #16 on: 2011-09-14 21:19:44 »

So the rectangle follows the camera, not vice versa?
Offline 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.
Offline 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.jpg

The minimap is your entire world, the 'main game area' is your canvas.
Offline 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 Smiley
Offline 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 Smiley


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.
Offline 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.
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.274 seconds with 20 queries.