Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (780)
Games in Android Showcase (233)
games submitted by our members
Games in WIP (857)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Canvas: How do you make the Canvas as a chase camera for moving objects?  (Read 3580 times)
0 Members and 1 Guest are viewing this topic.
Offline tom_mai78101
« Posted 2012-08-28 16:17:37 »

Here's pastebin of my currently managed code.

StoryTime!  Roll Eyes

I have successfully managed to create a simple chase camera. The camera itself is the Canvas. The region of the camera is the region of the Canvas. The camera (Canvas) follows a stationary unit, while other objects move in opposite directions, creating the illusion that the stationary unit is moving and the camera is "chasing" it.

But, a friend of mine points that my simplistic design is a bad design if I were to expand on this. For example, if I were to add lots of objects to my game, I would have to calculate each and every single object. The friend thinks that the Canvas could just follow around the unit itself, while the unit moves around stationary obstacles, making the game more flexible and more easier to code. So I did a rewrite, albeit unsuccessful.

It's like this diagram shown here:

The trouble I'm having is that, due to some technical difficulties, I can only obtain the center position, (x,y), of the Canvas. The map itself is loaded from a binary file, with everything from trees, to guns, to doors, etc. all fully created in the file. If I were to just load the file, my unit (the purple dot in the diagram) would spawn in at the top left corner.

The main problem, thus the question, is how do I map the Canvas's center position onto the purple dot all the time?

The hint I'm getting is that, if I can obtain the unit's position coordinates, then do something I have no clue on, I can then take the results from there, and offset all of the objects. But, wouldn't that defeat the purpose of what my friend is thinking of?  Clueless Thanks in advance.
Offline loom_weaver

JGO Coder

Medals: 17

« Reply #1 - Posted 2012-08-28 16:37:40 »

Is your code what you have now or what you had before your changes?

In either case you'll need to process most of your objects each render pass (until you add viewport culling).

I would recommend storing the camera position e.g.:
int cameraX;
int cameraY;

Then your main render pass would appear as such:
for (entity <- all entities) {
  int xOffset = entity.x - cameraX;
  int yOffset = entity.y - cameraY;

  draw entity on your Canvas at (Display.width/2 + xOffset, Display.height/2 + yOffset)

Now you can either keep your camera stationary (fixed values) or update its position to be the location of your tracked entity each frame.
Offline tom_mai78101
« Reply #2 - Posted 2012-08-29 06:40:41 »

Very tricky to pull it off, but I managed to successfully implement a working prototype. Thanks!  Grin Credit goes to loom_weaver.

Code for Curious:

public void tick(RenderView view) {
      //Accelerometer static class from API
      //(x,y) = Object Position Coordinates
      //(vx,vy) = Vector of Object Velocity
      //RenderView is a subclass of Canvas. Variables "translateX" and "translateY" are
      //camera position.
      vx += Accelero.X * 0.1;
      vy += Accelero.Y * 0.1;
      x += vx;
      y += vy;
      view.translateX = x;
      view.translateY = y;
      vx *= 0.1;
      vy *= 0.1;

   public void render(Canvas c, float translateX, float translateY, final float centerWidth, final float centerHeight) {
      if (bitmap == null || c == null)
      float xOffset = x - translateX;
      float yOffset = y - translateY;
      move(centerWidth + xOffset, centerHeight + yOffset);
      c.drawBitmap(bitmap, srcRect, dstRect, null);
Pages: [1]
  ignore  |  Print  

hadezbladez (1118 views)
2018-11-16 13:46:03

hadezbladez (505 views)
2018-11-16 13:41:33

hadezbladez (1111 views)
2018-11-16 13:35:35

hadezbladez (257 views)
2018-11-16 13:32:03

EgonOlsen (2547 views)
2018-06-10 19:43:48

EgonOlsen (2749 views)
2018-06-10 19:43:44

EgonOlsen (1549 views)
2018-06-10 19:43:20

DesertCoockie (2253 views)
2018-05-13 18:23:11

nelsongames (2088 views)
2018-04-24 18:15:36

nelsongames (2784 views)
2018-04-24 18:14:32
Deployment and Packaging
by philfrei
2019-02-17 20:25:53

Deployment and Packaging
by mudlee
2018-08-22 18:09:50

Java Gaming Resources
by gouessej
2018-08-22 08:19:41

Deployment and Packaging
by gouessej
2018-08-22 08:04:08

Deployment and Packaging
by gouessej
2018-08-22 08:03:45

Deployment and Packaging
by philfrei
2018-08-20 02:33:38

Deployment and Packaging
by philfrei
2018-08-20 02:29:55

Deployment and Packaging
by philfrei
2018-08-19 23:56:20 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!