我正在创建一个平台游戏,我有一个名为Platform的类,它采用x位置,y位置,宽度,高度和颜色,然后将它们设置在该平台内。
platform = new Platform(100, 250, 100, 10, Color.BLUE);
喜欢这个。
我可以这样调用变量:
g.fillRect(platform.x, platform.y, platform.width, platform.height);
当我想获得平台的颜色时,我会这样做:
g.setColor(platform.color);
我也有一个非常相似的播放器。
我有一个碰撞方法:
int LXOff = (platform.x - player.width); // boundaries
int LYOff = (platform.y - player.height); // boundaries
int RXOff = (platform.x + platform.width); // boundaries
int RYOff = (platform.y + platform.height); // boundaries
int LXOff2 = (platform2.x - player.width);
int LYOff2 = (platform2.y - player.height);
int RXOff2 = (platform2.x + platform2.width);
int RYOff2 = (platform2.y + platform2.height);
if(x <= 5 || y <= 29) // numbers are specific to the perfect border of the screen
{
return true;
}
if(x >= 495 - player.width || y >= 495 - player.height) // numbers are specific to the perfect border of the screen
{
return true;
}
if(x >= LXOff && y >= LYOff && x <= RXOff && y <= RYOff)
{
return true;
}
if(x >= LXOff2 && y >= LYOff2 && x <= RXOff2 && y <= RYOff2)
{
return true;
}
return false;
我的问题是我需要创建一组额外的变量来表示第二个平台使用的边界。我想知道如果我要使用更多的平台将来使用,我将如何使用数组或平台之类的东西来简化它,然后我可以使用一些循环绘制数组中的所有平台。
答案 0 :(得分:0)
我相信您将使用的平台将创建一个新的Platform对象。创建Map以创建平台名称的映射作为键和平台对象作为值。必要时通过平台名称检索Platform对象
Platform android = new Platform(....);
Platform windows = new Platform(....);
Map<String, Platform> map = new HashMap<String, Platform>();
map.put("android", android);
map.put("windows", windows);
//for retrieval
map.get("android");
如果边界是可变的,我建议创建一个抽象类,其中包含每个平台的公共逻辑和特定于平台的类。
答案 1 :(得分:0)
Platform[] platforms = new Platform[N]
其中N是数组的大小。
如果在创建数组时没有数组大小,最好使用
List<Platform> platforms = new ArrayList<Platform>()
答案 2 :(得分:0)
如果我理解你的问题,你可以绘制几个平台,但你也想绘制一些边界? O-O方式是为两者定义一个公共接口。
一个选项是定义一个接口,可能是 RectangleLike ,getX(), getWidth(), getColor()
等...然后你循环一个大数组(注意:更好地使用List)的RectangleLike并调用适当的代码。
或者,IMO更好地使用一种方法drawYourself(Graphics g)
定义一个接口,可能是 CanDrawIntoGraphics 。循环遍历调用drawYourself().
答案 3 :(得分:0)
我得到了这个解决方案,你必须发送一个平台的arraylist
List <Platform> platformList =new ArrayList<Platform> ();
platformList.add(platform1);
platformList.add(platform2);
将此platformList发送到您的方法
foreach(Platform platform:platformList){
int LXOff = (platform.x - player.width);
int LYOff = (platform.y - player.height);
int RXOff = (platform.x + platform.width);
int RYOff = (platform.y + platform.height);
if(x >= LXOff && y >= LYOff && x <= RXOff && y <= RYOff)
{
return true;
}
}
答案 4 :(得分:0)
正如Java文档所述
集合 - 有时称为容器 - 只是一个将多个元素组合到一个单元中的对象。集合用于存储,检索,操作和传递聚合数据。通常,它们代表形成自然组的数据项,例如扑克牌(卡片集合),邮件文件夹(字母集合)或电话目录(名称到电话号码的映射)。 p>
因此,为了维护平台数量以备将来使用,您可以创建Platform而不是Array的集合,因为Collection能够动态扩展和缩小。
来到编码端使用平台的Map或List,如果要删除重复使用设置界面
假设您有2个平台,那么您可以使用此
List<Platform> platformList=Arrays.asList(platform1,platform2);
迭代任何集合实现使用,迭代器接口
对于地图您可以看到 @ dc.sashwat
发布的示例