我在制作游戏时遇到了一些问题 首先,我正在制作塔防游戏,你可能知道,在塔防游戏中,游戏中的“怪兽”每次用炮塔挡住它们时都会改变路线。
现在,主要的想法是当你建造一个炮塔时,怪物会重新计算它们的路线。路线计算如下:在创建怪物之前,它获得一个获取方向,起点和终点的Trail对象。 Trail有一个X和Y,可以增加每个呼叫并检查炮塔是否位于该坐标中。如果找到炮塔,Trail会创建2个新的Trail对象,获取正确的对象并将其添加到自己,这将创建一个递归对象。 现在我不知道如何用Java编写所有这些内容,如果我使用这种方法,那将占用大量资源(我认为)。
我遇到的第二个问题是在SurfaceView上绘制布局。 我做了一个暂停按钮,当我点击它时,主线程(绘制游戏的那个)应该被停止。现在当线程停止时,暂停屏幕应该是可见的,但问题是,如果线程停止,则不会检测到屏幕上的任何触摸。所以我尝试创建一个RelativeLayout,向它添加Surface并使用2个按钮来扩展包含FrameLayout的pause.xml文件:Resume和Quit,当单击暂停按钮时,FrameLayout应该是可见的但是不起作用。 (我再次尝试使用RelativeLayour,但这也不起作用)
谢谢,如果你没有说明什么,请告诉我,我会尝试更容易理解。
编辑 - 代码
pause.xml
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pauseContent"
android:background="#AA000000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:visibility="invisible">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<Button
android:id="@+id/resume"
android:layout_width="100px"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Resume" />
<Button
android:id="@+id/quit"
android:layout_width="100px"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/resume"
android:text="Quit" />
</RelativeLayout>
</RelativeLayout>
GameActivity.java
public class GameActivity extends Activity {
private RelativeLayout mainLayout;
private GameView gameView;
private RelativeLayout pauseContent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainLayout=new RelativeLayout(this);
LayoutInflater inflater=(LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View v=inflater.inflate(R.layout.pause, null);
pauseContent=(RelativeLayout) v.findViewById(R.id.pauseContent);
gameView=new GameView(GameActivity.this, getWindowManager().getDefaultDisplay().getWidth(), getWindowManager().getDefaultDisplay().getHeight());
mainLayout.addView(gameView);
mainLayout.addView(pauseContent, new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
setContentView(mainLayout);
}
}
(我删除了一些不需要显示的代码) 在我的游戏中,我创建了一个Button对象,其功能类似于Android UI按钮(带有点击监听器......),现在,我创建了暂停按钮,当他点击它时,暂停布局应该是可见的 - 这不是的工作原理。