First off I am doing this in SFML 1.6 but even if you don't know that language the concept will be fine
So I trying to make a game that resembles advanced wars but I am not sure how to deal with selecting tiles
I want to be done by mousing over a tile and click on it, the tiles are in a 32x32 grid
When the mouse is hovering over a tile I want it to change sprites to a brighter version to indicate which tile is in focus
Currently the map is made up of 1 picture and not a collection of tiles
Should it be 1 big picture of a 32x32 grid or many little tiles?
How do I make it so the game knows when I click on a tile which one it is?
How do I make it so when I hover over a tile the tile lights up?
I really dont think I am going to have to make a huge mouse location bank for every tile on the map
My other idea is a 2D array but even them I am not sure
If someone could help me out or send me to a place where I can find out I would be great full C:
Thanks
Top Down TBS Tile Selection Help
say you have a map array which is 32x32 (tiles of size 32x32 not a whole picture)
and say your screen size was 640x460
this gives you a total number of tiles x:20 y:15
20 x15 = 300 tiles
this means that we can do very easy mouse translation.
when you click the mouse. get the mouse x and y location of the click/
then do something like
int tile = map[ (int)mouseX / 32][(int)mouseY / 32]
so to show an example of this. imagine your screen 640x480 and imagine we click at mouse location 450 150
450 / 32 = 14
150 / 32 = 4
so now we have our tile 14 across and 4 down which would select tile 56.
as for making the tile brighter im not sure
and say your screen size was 640x460
this gives you a total number of tiles x:20 y:15
20 x15 = 300 tiles
this means that we can do very easy mouse translation.
when you click the mouse. get the mouse x and y location of the click/
then do something like
int tile = map[ (int)mouseX / 32][(int)mouseY / 32]
so to show an example of this. imagine your screen 640x480 and imagine we click at mouse location 450 150
450 / 32 = 14
150 / 32 = 4
so now we have our tile 14 across and 4 down which would select tile 56.
as for making the tile brighter im not sure
here a quick example I wrote up. the code is java but the idea is the same
package example;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.*;
import javax.swing.*;
public class Main implements MouseListener
{
private final static int SCREEN_WIDTH = 640;
private final static int SCREEN_HEIGHT = 480;
private final static int tile_size = 32;
private int map[][];
private int mousex, mousey;
private JFrame frame;
private JPanel panel;
public Main()
{
map = new int[SCREEN_WIDTH / tile_size][SCREEN_HEIGHT / tile_size];
frame = new JFrame();
panel = new JPanel();
panel.setBackground(Color.red);
frame.setSize(new Dimension(640,480));
frame.setContentPane(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addMouseListener(this);
frame.setVisible(true);
int k = 0;
for(int i = 0; i < map.length; i++)
{
for(int j = 0; j < map.length; j++)
{
map[j] = k;
k++;
}
}
}
public static void main(String[] args)
{
Main main = new Main();
}
@Override
public void mouseClicked(MouseEvent e)
{
System.out.println(map[e.getX() / tile_size][e.getY() / tile_size]);
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
With your help and a tutorial I eventually found on the internet I got something to work
Now I have another issue which is still relatable, how do I work collision
This is with movement using the arrow keys, Im not sure how to know when the player hits a wall or section to stop movement since every tile doesn't have their own rectangle variable so its just a color on the screen
Help anyone? D:
Now I have another issue which is still relatable, how do I work collision
This is with movement using the arrow keys, Im not sure how to know when the player hits a wall or section to stop movement since every tile doesn't have their own rectangle variable so its just a color on the screen
Help anyone? D:
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement