游戏开发:从基础到大型游戏构建
立即解锁
发布时间: 2025-08-25 00:05:47 阅读量: 2 订阅数: 6 

# 游戏开发:从基础到大型游戏构建
## 1. 滚动游戏背景准备
在开发滚动游戏时,第一步是准备一个大的背景图像。例如,创建一个尺寸为 1100 像素宽、800 像素高的背景图像,命名为 `bigBackground.png`。为这个背景图像创建一个名为 `BigBackground` 的类。
同时,需要将显示时间的黑色圆角矩形与边框分离,因为这个黑色矩形应固定在舞台上的一个位置,不随背景滚动。将这个黑色矩形图像命名为 `timeDisplay.png`,并为其创建一个名为 `TimeDisplay` 的类。
### 1.1 添加对象到游戏
创建 `BigBackground` 和 `TimeDisplay` 对象,并将它们添加到舞台上并进行定位:
```actionscript
public var background:BigBackground = new BigBackground();
public var timeDisplay:TimeDisplay = new TimeDisplay();
addGameObjectToStage(
background,
-(background.width - stage.stageWidth) / 2,
-(background.height - stage.stageHeight) / 2
);
addGameObjectToStage(timeDisplay, 200, 5);
```
背景使用与之前相同的公式进行居中。确保在将所有其他对象添加到舞台后再添加 `timeDisplay` 对象,这样在游戏滚动时它会漂浮在其他对象之上。
### 1.2 定位游戏对象
由于处理的是一个大的空间,不能使用简单的舞台坐标来定位游戏对象,需要提供相对于背景的坐标。将游戏对象的 x 和 y 坐标添加到背景的 x 和 y 坐标上。例如,第一个盒子的定位代码如下:
```actionscript
addGameObjectToStage(box1, background.x + 100, background.y + 100);
```
所有游戏对象都按照这种方式相对于背景的位置进行定位:
```actionscript
// 盒子
addGameObjectToStage(box1, background.x + 100, background.y + 100);
addGameObjectToStage(box2, background.x + 200, background.y + 300);
// ... 其他盒子定位代码
addGameObjectToStage(box14, background.x + 800, background.y + 200);
// 炸弹
addGameObjectToStage(bomb1, background.x + 55, background.y + 710);
addGameObjectToStage(bomb2, background.x + 255, background.y + 310);
// ... 其他炸弹定位代码
addGameObjectToStage(bomb5, background.x + 755, background.y + 610);
```
在设置游戏对象的位置之前,必须先设置背景的 x 和 y 位置。
### 1.3 滚动和舞台边界
以下是 `enterFrameHandler` 中滚动背景和游戏对象的代码,使用自定义的 `scroll` 方法来实现游戏对象的滚动:
```actionscript
// 计算滚动速度
var temporaryX:int = background.x;
var temporaryY:int = background.y;
// 检查舞台边界
// 1. 检查内部边界
if (character.x < leftInnerBoundary) {
character.x = leftInnerBoundary;
rightInnerBoundary = (stage.stageWidth / 2) + (stage.stageWidth / 4);
background.x -= vx;
} else if (character.x + character.width > rightInnerBoundary) {
character.x = rightInnerBoundary - character.width;
leftInnerBoundary = (stage.stageWidth / 2) - (stage.stageWidth / 4);
background.x -= vx;
}
if (character.y < topInnerBoundary) {
character.y = topInnerBoundary;
bottomInnerBoundary = (stage.stageHeight / 2) + (stage.stageHeight / 4);
background.y -= vy;
} else if (character.y + character.height > bottomInnerBoundary) {
character.y = bottomInnerBoundary - character.height;
topInnerBoundary = (stage.stageHeight / 2) - (stage.stageHeight / 4);
background.y -= vy;
}
// 2. 背景舞台边界
if (background.x > 0) {
background.x = 0;
leftInnerBoundary = 0;
}
if (background.y > 0) {
background.y = 0;
topInnerBoundary = 0;
}
if (background.x < stage.stageWidth - background.width) {
background.x = stage.stageWidth - background.width;
rightInnerBoundary = stage.stageWidth;
}
if (background.y < stage.stageHeight - background.height) {
background.y = stage.stageHeight - background.height;
bottomInnerBoundary = stage.stageHeight;
}
// 3. 角色舞台边界
if (character.x < 50) {
```
0
0
复制全文
相关推荐










