例如,我现在一直在尝试弄清楚我的平台游戏中是否有地图,我希望我的角色能够在某个平台上跳跃。有没有什么简单的方法可以告诉游戏平台在哪里,玩家可以跳到哪里开始?
还有像超级马里奥兄弟这样的游戏,他们的地图都是用.txt文件制作的吗?因为我看了一个关于地图的教程,他说所有的专业游戏开发人员都会为地图制作一个.txt文件,并写下数字,例如:
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
1111111111111111111111111
222222222222222222222
要创建地图,请执行以下操作:这是正确的吗,或者开发人员如何在超级马里奥兄弟或Mega man游戏中制作地图?
我想知道的是..如果我想让我的玩家在某个平台或者别的什么地方跳起来..这就是我要找的。
发布于 2011-08-16 01:09:09
一个非常简单的例子:
你可以用一个例如数字的矩阵来表示地图。数字1表示障碍物,数字0表示空地。
[000000] [ ]
int[] map == [000000] == [ ]
[000111] [ xxx]
[001111] [ xxxx]player对象还必须在矩阵中有一个坐标,其中水平位置(X)是列,垂直位置(Y)是行,以及速度(方向和速度)。速度由用户输入控制,例如按向右箭头会将X方向设置为速度+1。
int xPos;
int yPos
int xSpeed;
int ySpeed;
while(true) {
// Check user input
if (upArrow()) {
ySpeed = 1;
}
if (downArrow()) {
ySpeed = -1;
}
if (leftArrow()) {
ySpeed = -1;
}
if (rightArrow()) {
ySpeed = 1;
}
// Update player position
xPos = xPos + xSpeed;
yPos = yPos + ySpeed;
// ...现在,您只需检查矩阵中球员对象在矩阵中的当前位置的数字。如果是0,什么都不做,如果是1:将速度设置为0。
int mapObstacle = map[xPos, yPos];
if (mapObstacle == 1) {
// Stop player movement
xSpeed = 0;
ySpeed = 0;
}
}要将地图保存在txt文件中,您必须让游戏从文件中读取/写入地图矩阵。下面是一个阅读的例子。
int n = 0;
while (mapFile.hasNextLine()) {
String mapLine = mapFile.nextLine();
for (int i = 0, n = mapLine.length; i < n; i++) {
int mapObstacle = Integer.parseInt(mapLine.charAt(i));
map[n, i] = mapObstacle; // Read map layout
}
n++;
}发布于 2014-08-13 14:06:22
使用文本文件可以,但使用PNG或位图图形更好。一个像素可以潜在地存储多达4个字节的信息,并且可以使用照片处理工具轻松创建。
首先,你应该有一个"Entity“或"GameObject”类,场景中的任何东西都可以继承。示例:
public class Entity
{
public float x, y, width, height;
public void onStep() {}
public void onDraw() {}
public RectF getRectF()
{
RectF rect = new RectF();
rect.left = x;
rect.top = y;
rect.right = x + width;
rect.bottom = y + height;
return rect;
}
}其次,您应该有一些扩展Entity类的不同类,如Player类、Wall类,可能还有Coin类:
public class Player extends Entity {...}
public class Wall extends Entity {...}
public class Coin extends Entity {...}您的下一步将是覆盖玩家的step事件,并在该step事件中迭代所有墙实体,如下所示:
@Override public void onStep()
{
for (Entity e : my_active_entities)
{
if (e instanceof Wall)
{
Wall wall = (Wall) e;
if (RectF.intersects(wall.getRectF(), this.getRectF()))
{
// We now know that our player is intersecting with "e"
// We also know that "e" is a wall
wall.doSomething();
this.doSomething();
}
}
}
}最后,是创建你自己的阶段加载器。这将根据当前像素的颜色遍历屏幕上的图形和绘图对象。
Bitmap bitmap = getOurBitmapFromSomewhere();
for (int x = 0; x < bitmap.getWidth(); x++)
for (int y = 0; y < bitmap.getHeight(); y++)
{
int color = bitmap.getPixel(x, y);
switch (color)
{
case 0xFF00FF00:
// First byte is Alpha
// Second byte is Red
// Third byte is Green
// Fourth byte is Blue
Player player = new Player();
player.x = x * TILE_SIZE; // For example, 16 or 32
player.y = y * TILE_SIZE;
my_active_entities.add(player);
break;
}
}这就是我关于游戏对象处理、碰撞检测和关卡加载的两个要点。任何在这方面遇到困难的人都非常欢迎在他们的软件中使用这段代码或这段代码的概念。
https://stackoverflow.com/questions/7067821
复制相似问题