Skip to content

Commit ab35185

Browse files
Added FrameSet
1 parent 21541ea commit ab35185

4 files changed

Lines changed: 136 additions & 275 deletions

File tree

README.md

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,7 @@ Custom font rendering is supported using TrueType fonts. `freetype` library is u
10471047
Free sprite resources: [https://craftpix.net/freebies/](https://craftpix.net/freebies/)\\
10481048
Online sprite cutter: [https://ezgif.com/sprite-cutter](https://ezgif.com/sprite-cutter)
10491049

1050-
#### `void iInitSprite(Sprite *s)`
1050+
<!-- #### `void iInitSprite(Sprite *s)`
10511051
10521052
- **Description:** Initializes a sprite structure.
10531053
- **Parameters:**
@@ -1059,62 +1059,78 @@ Online sprite cutter: [https://ezgif.com/sprite-cutter](https://ezgif.com/sprite
10591059
Sprite s;
10601060
iInitSprite(&s); // Initialize sprite and ignore white color
10611061
```
1062-
- **Sprite Structure**
1062+
-
1063+
``` -->
1064+
1065+
#### Structure Definitions
1066+
1067+
**FrameSet Structure**
1068+
```cpp
1069+
typedef struct
1070+
{
1071+
Image *frames;
1072+
int count;
1073+
} FrameSet;
1074+
```
1075+
1076+
**Sprite Structure**
10631077
```cpp
10641078
typedef struct
10651079
{
10661080
int x, y;
1081+
FrameSet frameSet;
10671082
int currentFrame;
10681083
....
10691084
} Sprite;
10701085
```
10711086

1072-
#### `void iLoadFramesFromFolder(Image *frames, const char *folderPath)`
1087+
#### `int iLoadFramesFromFolder(FrameSet *frames, const char *folderPath)`
10731088

10741089
- **Description:** Loads frames from a folder containing multiple images.
10751090
- **Parameters:**
10761091

1077-
- `frames`: Pointer to an array of `Image` structures.
1092+
- `frames`: Pointer to a `FrameSet` structure.
10781093
- `folderPath`: Path to the folder containing images.
10791094

1095+
- **Returns:** Number of frames loaded. -1 if failed to load any images.
10801096
- **Example:**
10811097
```cpp
1082-
Image frames[10];
1083-
iLoadFramesFromFolder(frames, "sprites/"); // Load images from a folder and ignore no color
1098+
FrameSet frames;
1099+
iLoadFramesFromFolder(&frames, "sprites/"); // Load images from "sprites/" folder
10841100
```
10851101
1086-
#### `void iLoadFramesFromSheet(Image *frames, const char *filename, int rows, int cols)`
1102+
#### `int iLoadFramesFromSheet(FrameSet *frames, const char *filename, int rows, int cols)`
10871103
1088-
- **Description:** Loads frames from a sprite sheet.
1104+
- **Description:** Loads frames from a sprite sheet.
10891105
- **Parameters:**
10901106
1091-
- `frames`: Pointer to an array of `Image` structures.
1107+
- `frames`: Pointer to a `FrameSet` structure.
10921108
- `filename`: Path to the sprite sheet image.
10931109
- `rows`: Number of rows in the sprite sheet.
10941110
- `cols`: Number of columns in the sprite sheet.
1111+
1112+
- **Returns:** Number of frames loaded. -1 if failed to load the sprite sheet.
10951113
10961114
- **Example:**
10971115
```cpp
1098-
Image frames[16];
1099-
iLoadFramesFromSheet(frames, "spritesheet.png", 4, 4); // Load images frames a sprite sheet with 4 rows and 4 columns
1116+
FrameSet frames;
1117+
iLoadFramesFromSheet(&frames, "spritesheet.png", 4, 4); // Load images frames a sprite sheet with 4 rows and 4 columns
11001118
```
11011119

1102-
#### `void iChangeSpriteFrames(Sprite *s, const Image *frames, int totalFrames)`
1120+
#### `void iChangeSpriteFrames(Sprite *s, const FrameSet* frames)`
11031121

11041122
- **Description:** Changes the frames of a sprite.
11051123
- **Parameters:**
11061124

11071125
- `s`: Pointer to a `Sprite` structure.
1108-
- `frames`: Array of `Image` structures representing the new frames.
1109-
- `totalFrames`: Number of frames in the array.
1126+
- `frames`: Pointer to a `FrameSet` structure representing the new frames.
11101127

11111128
- **Example:**
11121129
```cpp
1113-
Image frames[10];
1114-
iLoadFramesFromFolder(frames,"sprites/"); // Load images from a folder
1130+
FrameSet frames;
1131+
iLoadFramesFromFolder(&frames, "sprites/"); // Load images from a folder
11151132
Sprite s;
1116-
iInitSprite(&s); // Initialize sprite
1117-
iChangeSpriteFrames(&s, frames, 4); // Change the frames of the sprite
1133+
iChangeSpriteFrames(&s, &frames);
11181134
```
11191135
11201136
#### `void iSetSpritePosition(Sprite* s, int x, int y)`

examples/BattleDemo.cpp

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ typedef enum
99

1010
typedef struct
1111
{
12-
Image idle[4], walk[6], jump[8];
12+
FrameSet idle, walk, jump;
1313
Sprite sprite;
1414
State state;
1515
int direction; // 1 for right, -1 for left
@@ -19,37 +19,37 @@ Monster pinkMonster;
1919

2020
typedef struct
2121
{
22-
Image idle[18], walk[25], jump[25];
22+
FrameSet idle, walk, jump;
2323
Sprite sprite;
2424
State state;
2525
int direction; // 1 for right, -1 for left
2626
} Golem;
2727

28+
Image bg;
29+
2830
Golem golem;
2931

3032
void loadPinkMonster()
3133
{
32-
iLoadFramesFromSheet(pinkMonster.idle, "assets/images/sprites/1 Pink_Monster/Pink_Monster_Idle_4.png", 1, 4);
33-
iLoadFramesFromSheet(pinkMonster.walk, "assets/images/sprites/1 Pink_Monster/Pink_Monster_Walk_6.png", 1, 6);
34-
iLoadFramesFromSheet(pinkMonster.jump, "assets/images/sprites/1 Pink_Monster/Pink_Monster_Jump_8.png", 1, 8);
34+
iLoadFramesFromSheet(&pinkMonster.idle, "assets/images/sprites/1 Pink_Monster/Pink_Monster_Idle_4.png", 1, 4);
35+
iLoadFramesFromSheet(&pinkMonster.walk, "assets/images/sprites/1 Pink_Monster/Pink_Monster_Walk_6.png", 1, 6);
36+
iLoadFramesFromSheet(&pinkMonster.jump, "assets/images/sprites/1 Pink_Monster/Pink_Monster_Jump_8.png", 1, 8);
3537

36-
iInitSprite(&pinkMonster.sprite);
37-
iChangeSpriteFrames(&pinkMonster.sprite, pinkMonster.idle, 4);
38-
iSetSpritePosition(&pinkMonster.sprite, 250, 0);
38+
iChangeSpriteFrames(&pinkMonster.sprite, &pinkMonster.idle);
39+
iSetSpritePosition(&pinkMonster.sprite, 250, 110);
3940
iScaleSprite(&pinkMonster.sprite, 3.0);
4041
pinkMonster.state = IDLE;
4142
pinkMonster.direction = 1; // 1 for right, -1 for left
4243
}
4344

4445
void loadGolem()
4546
{
46-
iLoadFramesFromFolder(golem.idle, "assets/images/sprites/Golem_2/Idle Blinking");
47-
iLoadFramesFromFolder(golem.walk, "assets/images/sprites/Golem_2/Walking");
48-
iLoadFramesFromFolder(golem.jump, "assets/images/sprites/Golem_2/Jump Start");
47+
iLoadFramesFromFolder(&golem.idle, "assets/images/sprites/Golem_2/Idle Blinking");
48+
iLoadFramesFromFolder(&golem.walk, "assets/images/sprites/Golem_2/Walking");
49+
iLoadFramesFromFolder(&golem.jump, "assets/images/sprites/Golem_2/Jump Start");
4950

50-
iInitSprite(&golem.sprite);
51-
iChangeSpriteFrames(&golem.sprite, golem.idle, 18);
52-
iSetSpritePosition(&golem.sprite, 250, -75);
51+
iChangeSpriteFrames(&golem.sprite, &golem.idle);
52+
iSetSpritePosition(&golem.sprite, 250, 35);
5353
iScaleSprite(&golem.sprite, 0.5);
5454
iMirrorSprite(&golem.sprite, HORIZONTAL);
5555
golem.state = IDLE;
@@ -67,14 +67,14 @@ void iAnim()
6767
!isSpecialKeyPressed(GLUT_KEY_RIGHT))
6868
{
6969
pinkMonster.state = IDLE;
70-
iChangeSpriteFrames(&pinkMonster.sprite, pinkMonster.idle, 4);
70+
iChangeSpriteFrames(&pinkMonster.sprite, &pinkMonster.idle);
7171
}
7272
break;
7373
case JUMP:
7474
if (!isSpecialKeyPressed(GLUT_KEY_UP))
7575
{
7676
pinkMonster.state = IDLE;
77-
iChangeSpriteFrames(&pinkMonster.sprite, pinkMonster.idle, 4);
77+
iChangeSpriteFrames(&pinkMonster.sprite, &pinkMonster.idle);
7878
}
7979
break;
8080
}
@@ -90,6 +90,7 @@ void iDraw()
9090
iClear();
9191
iSetColor(255, 255, 255);
9292
iFilledRectangle(0, 0, 800, 400);
93+
iShowLoadedImage(0, 0, &bg);
9394
iShowSprite(&golem.sprite);
9495
iShowSprite(&pinkMonster.sprite);
9596

@@ -144,11 +145,12 @@ void iSpecialKeyPress(unsigned char key)
144145
}
145146
else
146147
{
147-
pinkMonster.sprite.x--;
148+
golem.sprite.x += 2;
149+
iWrapImage(&bg, 2);
148150
if (pinkMonster.state != WALK)
149151
{
150152
pinkMonster.state = WALK;
151-
iChangeSpriteFrames(&pinkMonster.sprite, pinkMonster.walk, 6);
153+
iChangeSpriteFrames(&pinkMonster.sprite, &pinkMonster.walk);
152154
}
153155
}
154156
}
@@ -161,11 +163,12 @@ void iSpecialKeyPress(unsigned char key)
161163
}
162164
else
163165
{
164-
pinkMonster.sprite.x++;
166+
golem.sprite.x -= 2;
167+
iWrapImage(&bg, -2);
165168
if (pinkMonster.state != WALK)
166169
{
167170
pinkMonster.state = WALK;
168-
iChangeSpriteFrames(&pinkMonster.sprite, pinkMonster.walk, 6);
171+
iChangeSpriteFrames(&pinkMonster.sprite, &pinkMonster.walk);
169172
}
170173
}
171174
}
@@ -175,7 +178,7 @@ void iSpecialKeyPress(unsigned char key)
175178
if (pinkMonster.state != JUMP)
176179
{
177180
pinkMonster.state = JUMP;
178-
iChangeSpriteFrames(&pinkMonster.sprite, pinkMonster.jump, 8);
181+
iChangeSpriteFrames(&pinkMonster.sprite, &pinkMonster.jump);
179182
}
180183
}
181184
if (key == GLUT_KEY_DOWN)
@@ -190,6 +193,8 @@ int main(int argc, char *argv[])
190193
iSetTimer(100, iAnim);
191194
loadPinkMonster();
192195
loadGolem();
196+
iLoadImage(&bg, "assets/images/background.jpg");
197+
iResizeImage(&bg, 800, 400);
193198
iOpenWindow(800, 400, "BattleDemo");
194199
return 0;
195200
}

0 commit comments

Comments
 (0)