Game

Hi,

I'm working right now on a game. I am trying to move the map when the player reaches the end of the window, this part works so far. But my problem is how I can move the collision boxes to. My idea was, to take the variable which stores shift of the map and add it to the collision boxes. But somehow that not as easy. Maybe somebody can help me?

I incuded my code maybe you can find my failure.

Thanks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//Player screeen border
void player_boundaries(playerHandle* pPlayer)
{	
	//Hit ground
	if( pPlayer->y >= ( MAP_HEIGHT * 32 - 64 ) )
	{
		pPlayer->y = MAP_HEIGHT * 32 - 64;
			pPlayer->isOnGround = true;
	}

	//Hit TOP
	if( pPlayer->y < 0 )
	{
		pPlayer->y = 0;
	}

	//Right boundaries
	if( pPlayer->x > ( 32 * MAP_WIDTH ) )
	{
		pPlayer->x = (32 * MAP_WIDTH) -1;
	}

	if( pPlayer->x > 500 )
	{
		pPlayer->x = 499;
		pPlayer->map_x --;
	}

	//Left boundaries
	if( pPlayer->x <= 0 && pPlayer->map_x >= 0 )
	{
		pPlayer->x = 0;
		pPlayer->map_x = 0;
	}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//Player collision map
void player_collision_map( playerHandle* pPlayer )
{
	//Map array
	int map_offset [MAP_HEIGHT][MAP_WIDTH]=
							{
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
								{0,0,0,0,0,0,0,1,2,2,3,0,0,0,0,0,0,0,0,1,2,2,2,2,2,3,0,0,0,0},
								{0,0,0,1,2,3,0,4,5,5,6,0,0,0,0,1,2,3,0,4,5,5,5,5,5,6,0,0,0,0},
								{2,3,0,4,5,6,0,4,5,5,6,0,0,0,0,4,5,6,0,4,5,5,5,5,5,6,0,0,0,0}
							};
	
	pPlayer->isOnGround = false;

	//Stay on top of platform
	if( map_offset[ ( ( (int)pPlayer->y + 64 ) / 32 ) ] [ ( ( (int)pPlayer->x + 2 + pPlayer->map_x ) / 32 ) ] != 0)
	{
		pPlayer->vy = 0;
		pPlayer->isOnGround = true;
	}

	if( map_offset[ ( ( (int)pPlayer->y + 64 ) / 32 )] [ ( ( (int)pPlayer->x + 30 + pPlayer->map_x ) / 32 ) ] != 0)
	{
		pPlayer->vy = 0;
		pPlayer->isOnGround = true;
	}

	//Collision for the left platform
	if( map_offset[ ( ( (int)pPlayer->y ) / 32 )] [ ( ( (int)pPlayer->x + 32 ) / 32 ) ] == 1)
	{
		pPlayer->vx = 0;
		pPlayer->x --;
	}

	if( map_offset[ ( ( (int)pPlayer->y + 55 ) / 32 )] [ ( ( (int)pPlayer->x + 32 ) / 32 ) ] == 1)
	{
		pPlayer->vx = 0;
		pPlayer->x --;
	}

	if( map_offset[ ( ( (int)pPlayer->y ) / 32 )] [ ( ( (int)pPlayer->x + 32 ) / 32 ) ] == 4)
	{
		pPlayer->vx = 0;
		pPlayer->x --;
	}

	if( map_offset[ ( ( (int)pPlayer->y + 64 ) / 32 )] [ ( ( (int)pPlayer->x + 32 ) / 32 ) ] == 4)
	{
		pPlayer->vx = 0;
		pPlayer->x --;
	}

	//Collision for the right platform
	if( map_offset[ ( ( (int)pPlayer->y ) / 32 )] [ ( ( (int)pPlayer->x ) / 32 ) ] == 3)
	{
		pPlayer->vx = 0;
		pPlayer->x ++;
	}

	if( map_offset[ ( ( (int)pPlayer->y + 55 ) / 32 )] [ ( ( (int)pPlayer->x ) / 32 ) ] == 3)
	{
		pPlayer->vx = 0;
		pPlayer->x ++;
	}

	if( map_offset[ ( ( (int)pPlayer->y ) / 32 )] [ ( ( (int)pPlayer->x ) / 32 ) ] == 6)
	{
		pPlayer->vx = 0;
		pPlayer->x ++;
	}

	if( map_offset[ ( ( (int)pPlayer->y + 64 ) / 32 )] [ ( ( (int)pPlayer->x ) / 32 ) ] == 6)
	{
		pPlayer->vx = 0;
		pPlayer->x ++;
	}
}
I'd say that the collision map covers the entire playground/level while the window where you're actually playing is just a part of it. So you need the player->x/y + the window->x/y. My opinion is that the collision map is equivalent to your level design.
Topic archived. No new replies allowed.