自从a开始使用LibGDX以来,已经有几次了
现在我正在尝试将身体拖放到相同形状的插槽上:
例如,方块只能放在相同大小或更大的方块上。三角形和圆也是如此
我的出发点是上面的例子,但我不知道把所有的东西放在一起
1-最简单的实施方法是什么
2-我是否应该使用Box2D和来创建多边形形状,并在drop方法中使用它来测试静态形状的拖动形状
3-如何使用Vector2测试顶点/边,以查看其是否更大
希望我的方向是对的。你在这里走错了方向。dragandrop仅用于scene2d,它与Box2D完全无关
我正在开发一个用LibGdx引擎和Java编写的新游戏。
我对这个游戏中的一些物理问题有疑问
我想以弹道射箭(愤怒的小鸟风格)
找不到这样做的方程式
我使用这些速度方程:
float velx = (float) (Math.cos(rotation) * spd);
float vely = (float) (Math.sin(rotation) * spd);
我将其添加到当前位置,箭头朝一个方向发射-直
我想也许改变旋转可以帮助我实现我想要的(弹道路径)
这确实有帮助,但
使用libgdx中的scene2d,我希望一个演员相对于屏幕保持固定,但同时还有其他演员,即在其上方(覆盖)和下方,彼此独立地缩放和移动,如下所示:
我发现固定角色(红色)在其他角色之间有一个z级别的唯一方法是使其成为图中蓝色角色的子角色(绿色),但随后它将与其父角色(蓝色)一起缩放和移动
我试图通过覆盖fixed actor中的draw()来解决这个问题,如下所示:
public void draw(SpriteBatch batch, float parentAlpha){
我有一个屏幕,带有一个输入多路复用器,其中添加了一个手势监听器,但是挤压和缩放回调从不触发
我正在使用的设备是一台带有Windows 8.1的触摸屏笔记本电脑,触摸屏幕确实会激活“点击”、“平移”和“平移”,因此在某种程度上一切正常。文档似乎没有提到桌面和gestureelistenercombo上有限制
在桌面Java应用程序中,有没有办法让zoom和pinch回调启动 不,LibGDX不支持桌面上的多点触摸。看见
是否可以将组添加到组中。我不久前就做了,但根本不起作用。我不确定原因是什么,所以我做了一个变通办法
现在我认为第一种方法更容易
Group group = new Group();
Group otherGroup = new Group();
group.addActor(otherGroup);
这应该行得通,对吧?所以我找出了问题所在:
我确实重写了“组”中的draw方法,我想你必须手动调用孩子们的draw方法,因为一旦我删除了“组”中的draw方法,一切都很好
同样的事情也适用于act
我正在尝试使用libGDX在eclipse中创建一个新项目。我以前设法让一个项目工作,但删除一些文件后,该项目变得无法使用。
现在,当我尝试使用libGDX项目设置时,我被告知在根项目“NEWGDL”中找不到任务“afterEclipseImport”。NEWGDL是GDX项目的选定工作区
并且没有项目可以导入到我的eclipse工作区中。
我只是尝试构建Android,而Box2d已被选中
有人能告诉我出了什么问题以及如何解决这个问题吗?编辑:我报告了错误,并且在4天前已修复,最新的libGD
我创建了位图字体,但似乎无法增加文本的大小。看看我的代码。绘制字体(批量,“分数:+highscore,10300) BitmapFont中有,例如,您可以将其设置为2.0f,以将大小增加到200%
然而,这可能不是您想要做的,因为这将导致非常糟糕的质量
您应该做的是使用创建多个不同字体大小的字体版本,并在代码中切换它们
另一种方法是使用扩展名(但并非所有平台都提供),并在运行时生成所需大小的字体。是另一种方法吗?(支持所有平台)并非如此。您可能会使用非常大的字体大小,然后缩小它们的大小,因为这
我在这里遵循了libGDX指南:对于我的android项目,一切都很好,但是在我的ios项目中,我的横幅显示为黑色矩形。我知道我的网络工作正常,因为我的插播广告加载得很好。我还确保使用了正确的admob应用程序密钥
有人知道我为什么看到黑色横幅吗
任何帮助都将不胜感激只需在AdView上设置背景色即可:
adView.setAdUnitId(AD_UNIT_ID);
adView.setBackgroundColor(Color.TRANSPARENT);
如果仍然遇到问题,请检查
我在屏幕中使用libgdx和表布局
当我在初始化时在表中添加图像时一切正常,但当我在某些事件(碰撞时)中将图像添加到表中时,图像被放置在一列中,而不是新行中的每个图像
Table tableCenterLeft;
Image image1, image2;
private void init() {
tableCenterLeft = new Table();
image1 = new Image(Assets.instance.image.image1
标签: Libgdx
blurframebufferframe-ratefbo
我使用FBO渲染图像过程模糊着色器,fps下降到20。为什么?当我在没有FBO的情况下直接通过x轴方向模糊它时,它还可以。当我使用FBO恢复图像并将其绘制到sceen时,它也可以。有什么我应该注意的吗?任何帮助都会很好!谢谢
这是我的密码:
private static final int FB_SIZE = 200;
public SpriteBatch batch;
protected ShaderProgram mShaderA;
protected ShaderProgram mShad
我正在做一个游戏,不同的物体从屏幕的上半部分落到下半部分。我对如何随机选择要生成的TextureRegion和不更改已生成的TextureRegion存在问题。当我运行游戏时,让我们假设电子区域首先生成,然后当下一个生成时,让我们假设它是一个反质子区域,第一个电子区域更改为我不想要的反质子区域
这是我的游戏课:
public class GameScreenTest implements Screen {
...
@Override
public void render(float delta
如何从TextureRegion或Sprite创建Pixmap?我需要它来更改某些像素的颜色,然后从Pixmap(在加载屏幕期间)创建新纹理。Texture-Texture=textureRegion.getTexture();
如果(!texture.getTextureData().isPrepared()){
texture.getTextureData().prepare();
}
Pixmap Pixmap=texture.getTextureData().consumePixmap(
我做了我的第一个游戏,当主要演员被击中时死亡,游戏结束了
我的创业班
public class MyGdxGame extends Game {
MenuScreen menuScreen;
GameScreen gameScreen;
GameOver gameOverScreen;
@Override
public void create() {
menuScreen = new MenuScreen(this);
gameScreen = new GameScreen
FileHandle似乎只提供获取实际文件的相对路径的函数。
如何获取文件句柄的绝对路径?文件句柄提供了一个名为文件()的函数,它返回一个文件对象,该对象可用于调用getAbsolutePath()
简而言之:String absolutePath=fileHandle.file().getAbsolutePath()
我正在尝试为我的游戏创建一个进度条。使用下面的代码,我希望加载的图片是背景的一半。但结果是这样的。我还需要一些我不知道怎么做的填充物
在我脑子里,你的代码看起来不错。如果删除动画持续时间会怎么样?您是否将此栏添加到舞台并在其上调用.act()?您是否在某处重置了该值?删除动画持续时间确实修复了它。非常感谢。那么我认为它没有正确更新。从未在ProgressBar上使用过动画,您是否正在调用act each frame以便动画也会更新?目前没有,我将把它加起来。现在可以了。谢谢
Progr
我对子弹的轨迹有问题,当我点击鼠标时,子弹没有准确地射向屏幕上的鼠标光标
这是我的代码:
@Override
public boolean mouseMoved(int screenX, int screenY) {
touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
gamecam.unproject(touchPos);
return false;
我正在实施一个相对简单的游戏,我希望照明系统的工作,如果事情是在完全黑暗或完全光明,所有的灯光虽然是明亮的起源,并逐渐变暗,直到他们淡出
我希望它们在其范围边缘的亮度与在其原点的亮度相同,但我似乎找不到这种行为的现有选项
如果已经有办法做到这一点,请让我知道。如果不是,我将如何着手实施它?这很好,但我不认为这正是我想要的。虽然我不希望灯光因距离而衰减,但我确实希望它仍然被环境中的对象阻挡,并且我认为该方法不支持任何阴影。
我一直在尝试用libGDX制作一些火粒子发射器
我下载了一个示例()。它看起来不错,但最终会结束(火熄灭),然后重新开始。我在文件中看到,持续时间是60000ms。因此,他们依赖于输入一个较高的数字
好吧,那太差劲了。我试着将持续时间设为0,但这当然不起作用,因为它只是一次又一次地死去
那么,如何制作无限持续时间的粒子发射器呢?我找到了一个简单的解决方法,可以解决您试图实现的问题
effect.findEmitter("youremitter").durationTimer = 0;
如果每次
我有一个小组,我已经在我的屏幕阶段添加
//Code in show() method of my screen
MyGroup myGroup = new MyGroup();
Stage stage = new Stage();
stage.add(myGroup);
//And also there are few more actors which are omitted
Gdx.input.setInputProcessor(stage);
//Code in my group
p
我正在尝试使用libgdx学习box2d。我有一个堕落的角色。若角色和奖金冲突,我会移除角色并创建更小的角色来调整大小。但是,当我创建一个新的较小的,重力重置自己,新的运动开始为新的一个像新的游戏开始。是否有任何方法可以将由于重力而产生的旧字符值转换为新字符值以进行不间断运动 假设您正在以与原始身体相同的位置和角度创建新身体?对速度做同样的事情怎么样
在移除原始物体之前,先获得它的线速度和角速度。
(GetLinearVelocity、GetAngularVelocity)
创建新实体时,在其中
我正在做一个2D侧滚游戏
我用了一些很好的闪烁的灯
使用此方法,如何生成仅出现在曲面上的平行光?
块存储在2D字节数组中
我还尝试制作一个2D light[]阵列,并根据块所在的位置计算标高。然而,让它与其他光源(例如,手电筒)一起工作是非常困难的。
我真的很想为此使用着色器。它看起来平滑多了。
另外,我不需要平行光在进入一个块时衰减,我只需要光在碰到一个实心块时完全停止。如果你只想在地面上产生照明效果,你可以在块上应用一个光照贴图(如教程中所示),模拟你想要的灯光衰减,如果挡块连接到透明/空
这似乎是一个非常简单的问题,但我似乎找不到一个简单的答案。我只是想把一个垂直组放在舞台中央。大多数容器似乎很自然地做到了这一点,但这一个没有。默认情况下,它只是在视图顶部对齐。它也不响应“align.bottom”设置,只响应左侧和右侧。有什么想法吗
stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false, spriteBatch);
//VericalGroup the butt
标签: Libgdx
collisionoverlaprectangles
我正在使用2D platformer,我想制作从天上掉下来的盒子。当箱子和地面发生碰撞时,箱子应停止下落。下面是我在Box类中的碰撞检测和更新代码
这是我在主类中的代码
但问题是,当箱子和地面相撞时,我的箱子还是会掉下来,只是速度很小。为什么我会得到这个奇怪的结果?我知道我可以删除hits=false;在我的hits2方法中,当长方形和地面碰撞时,我的盒子不会掉下来,但为什么长方形之间的碰撞如此奇怪呢?
更新:
这里是它的外观您是否通过绘制来检查地面的碰撞矩形?并绘制长方体的碰撞并检查碰撞点。因
我正在研究LibGDX的着色器,注意到有些属性只在LibGDX中使用
标准的顶点和片段着色器可以完美地工作,并应用到我的SpriteBatch中
当我尝试使用HQX着色器时,我会遇到很多错误
可能是因为我需要向着色器发送一些LibGDX相关变量,但我无法确定应该发送哪个
我想在有大屏幕的桌面上使用这些着色器,这样游戏在这些屏幕上看起来就一直很棒
我使用以下代码加载着色器:
试试看{
shaderProgram=new shaderProgram(Gdx.files.internal(“verte
它甚至写在文档中,假设屏幕的原点在左上角,另一方面假设屏幕的原点在左下角。这太烦人了。这是故意的吗?我没有得到什么吗
tmp3.x = selected.pos.x;
tmp3.y = selected.pos.y;
camera.unproject(tmp3);
camera.project(tmp3);
这将翻转向量,并在其中返回相同的向量
编辑:
首先,我尝试使用并将点从一个视口转换到另一个视口(将上下文菜单放置在游戏元素上
在实体的固定装置上绘制纹理的常用方法是什么?我想使用的纹理只是一个带有颜色的1x1像素纹理。我的身体是由许多长方形的多边形组成的(旋转方向不同)。
我是否必须迭代所有装置并计算其角度等,然后绘制1x1纹理?
还是有更有效的方法
标签: Libgdx
polygonshape-rendering
我创建了一个矩形多边形,如下所示:
polyrect=new Polygon(new float[]{0,0,width,0,width,height,0,height});
polyrect.setOrigin(width,0);
polyrect.setRotation(45f);
polyrect.setPosition(getX(),getY());
shapeRenderer.polygon(polySwatter.getTransformedVertices());
它工作得很好,
我有一张等距图,我想在瓷砖上画精灵。
当然,如果我得到了等距图块的位置,我在这个位置画了一个精灵,它不会在图块的顶部画,因为等值线图是旋转的
这里,如果我为每个瓷砖位置绘制一个颜色立方体
##
所以我的问题是,我要做什么才能在瓷砖上画出这个精灵?
Im使用等轴测地图渲染器
提前感谢,我已经搜索了一整天,我的英语词汇的缺乏无助于搜索
编辑:@d我们的回答几乎成功了。。下面是它现在的样子
您需要的是将笛卡尔坐标值转换为等轴测值。
这应该会有所帮助
//Cartesian to isometri
我正在尝试根据我的正交摄影机可以看到的内容创建一张图片。LibGDX有一个ScreenUtils类,它有一个getFrameBufferPixels方法,但它不是我想要的,因为我只想得到一台相机看到的,而不是整个屏幕
标签: Libgdx
polygongame-physics
你好,我有两个小问题:
是否可以将身体的形状1:1映射到纹理,这样我就有了完美的碰撞检测?因为现在我只知道两种方法:先创建形状,然后加载纹理,或者先加载纹理,然后将形状设置为长方体。。。但我认为这太简单了
还有人知道我怎样才能关掉世界物理吗?当身体A撞击到身体B时,我希望身体做一个特定的动画,并以一些声音效果落在地上,但当两个物体碰撞时,它们会在不同的方向相互反弹等。当两个物体碰撞时,我希望它基本上结束,停止计算动量等
我不关心解决方案本身,只要告诉我这两个问题是否可行就足够了。我猜您使用的是B
我是LibGdx新手,在输入处理方面有问题
我的球员需要在触球时射出子弹。
但这个方法似乎只调用了一次
然后,用户必须再次单击才能射出另一颗子弹
我总是想在点击停止的时候开枪
有办法处理这个用例吗 深入调查,而不是获取信息。因此,在渲染或更新方法中,请使用以下内容:
boolean activeTouch = false;
if (Gdx.input.isTouched(0)) {
if (activeTouch) {
// continuing a touch ..
我已经完成了我的个人电脑版本和libgdx游戏的测试,在个人电脑上看起来还不错,但当我在两部android手机(三星Galaxy S3 mini和三星Galaxy S2)上运行它时,我遇到了一些问题,这是我没有预料到的。基本上,在我的1v1播放器版本中,每个播放器都有自己的左右触摸控制。玩家的速度是恒定的(速度向量的长度是恒定的),但每当玩家触摸任何控件时,速度向量的方向都会改变。我的代码如下所示:
private void handleInput(float delta) {
if (
标签: Libgdx
livefreezewallpaper
我不知道为什么每次不显示壁纸时(从睡眠模式返回或退出应用程序等),它都会冻结,有时正常工作,有时冻结。
我在用夜间版本。
在Logcat中,我看到“引擎已恢复”,但没有渲染
如何解决此问题?在暂停期间,您可能会忘记某些显式管理的资源。例如,任何OpenGL对象引用在挂起后都是无效的。Libgdx开发人员在将对象存储在static成员中时经常遇到问题,他们认为这些对象只需要初始化一次,但该对象是(或包含最终指向)OpenGL资源(因此至少需要在每次“恢复”时重新初始化)
有关生命周期影响的描述,请
我有一个com.badlogic.gdx.scenes.scene2d.ui.Image,它是从Pixmap构建的。Pixmap只有一个像素,因为我用它来构建一个可以淡入淡出的背景图像
Pixmap pmap=新的Pixmap(1,1,Pixmap.Format.rgba888);
pmap.setColor(1.0f、1.0f、1.0f、1.0f);
pmap.drawPixel(0,0);
bgImage=新图像(新纹理(pmap));
pmap.dispose();
bgImage.set
您好,我是libgdx新手,尝试创建一个ludo游戏。我知道我可以画棋盘,但当我尝试显示骰子或任何和平时,我会附加游戏代码。
请阅读和帮助
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
batch = new SpriteBatch();
camera = new OrthographicCamera(1, h / w);
标签: Libgdx
box2dcollision-detection
我想检查一下玩家是否被禁飞,但我想避免创建自己的联系人侦听器和过滤器。在LibGDX&Box2D中,如果没有它们,有什么方法可以做到这一点吗?如果没有联系人侦听器,我几乎无法检测某个东西是否被接地。有人谁知道更多关于box2d可能会出现,并证明我错了,但这似乎是一个不必要的限制。有什么特别的原因让你不想使用它吗?我不想让我的游戏变得不必要的复杂。添加联系人侦听器只是多了一个类,它会让事情变得比使用奇怪的变通方法来故意避免复杂。好的,谢谢你向我保证。我将开始创建一个新的联系人侦听器。
我使用libgdx类创建一条通过三个点的平滑曲线。基本上我想把硬币放在两个平台之间的弯曲路径上。为此,我遵循以下算法
以第一个平台的端顶点为第一个控制点
取中间点bw第一个平台的顶端和第二个平台的顶端,在y方向上增加一点高度,并以此点作为第二个控制点
将顶部起点作为第二个平台作为第三个控制点
现在,当我尝试使用这三个控制点为我的硬币生成创建一个平滑路径时,我只得到一个值,这就是t所使用的值(CatmullRomSpline使用浮点值t作为参数,它必须改变bw 0和1)
有什么我不知道的吗。我
我正在使用多边形进行碰撞检测。现在我正在尝试进行更复杂的碰撞,为此,我需要将每个多边形顶点作为向量2。我在网上搜索过,唯一能找到的就是PolygonBody()
我能在libgdxapi中找到的唯一有用的方法是getTransformerAdverties()和area(),但我不知道如何处理这些数据
有什么想法吗?你是指com.badlogic.gdx.math.Polygon谈论多边形还是将网格用作多边形
在第一种情况下,您可以这样做:
Array<Vector2> getPol
所以我有3门课,MyGdxGame,Ball和DetectCollision。MyGdxGame初始化4个球的实例(不同的颜色和速度/方向,都从屏幕两侧反弹),并将它们存储为arraylist
此arraylist通过DetectCollision的构造函数传递:
public class DetectCollisions {
ArrayList<Ball> ball;
public DetectCollisions(ArrayList<Ball> ball) {
我正在尝试从纹理区域创建动画。区域存储在由LibGdx纹理打包器创建的atlas文件中。我目前感兴趣的地区是:
mygame/myregion
rotate: true
xy: 2, 544
size: 2574, 279
orig: 2574, 279
offset: 0, 0
index: -1
请注意rotate true属性。以下是文档中的示例:
该区域由4帧组成[它是由4帧而非单个图像组成的单个png图像],随后使用分割方法进行分割:
int framesCount = 4;
my
我想制作一个2D侧滚游戏,其中游戏世界/游戏舞台向左移动,即背景像Flappy Bird一样向左移动。你知道我如何能够自动循环一个背景演员对象,它的宽度和高度与舞台的正交摄影机相同吗 其实很简单。您所需要做的就是在Actor实例上使用moveByx,y方法
float xMovingDelta = 10;
float yMovingDelta = 10;
actor.moveBy(xMovingDelta, yMovingDelta);
// Make sure you call the mov
我在box2d中创建了一个ContactListener和一个传感器装置,并希望在每个步骤中获得一个联系人回调。我的问题是beginContact和endContact显然只在触点开始和结束时调用,但只要触点持续存在,就不会调用。在这些情况下,建议使用preSolve或postSolve,但这些不适用于传感器
我怎样才能在每一步都获得与传感器接触的回拨?提前感谢您的建议。我现在的方法是在这种特殊情况下不使用传感器,而是使用常规固定装置,并在ContactListener.pressolve中调用
因此,我对平铺贴图有一个问题,我的贴图有间隙/纹理出血,我阅读了关于这个问题的其他问题,但我无法得到一个有效的问题。
我使用的是已经制作好的雪碧片,其中包括所有的瓷砖,那么enyone知道解决方案吗?我可以制作,而且我不需要从雪碧片上切割60块瓷砖?使用纹理过滤器最近的非线性因为线性用户4个周围的纹理来计算实际颜色,所以当它位于瓷砖的边界上时,它将生成间隙。您可以在此处阅读有关TextureFilter的内容:
你可以这样设置:
Sprite sprite;
//now yo
我正在尝试使用Pixmap在LibGDX中创建“可破坏”地形(2D)。
但是,我正在设置的颜色不能正确显示在屏幕上
完整源代码(颜色当前用于调试,在版本中应为alpha=0):
公共类地形扩展{
私人雪碧;
私有纹理;
私有Pixmap-myMap;
公共地形(纹理,矢量2位置)
{
设置位置(位置x,位置y);
如果(!texture.getTextureData().isPrepared()){
texture.getTextureData().prepare();
}
//最终产品将从纹理
我在搅拌机里做了一个机器人手臂,想象两个相连的圆柱体,连在两块骨头上。我还为它们制作了动画。我可以将它们导出为.fbx,将它们转换为.g3db,然后将其加载到libGDX并播放动画。到目前为止还不错
然后,我根据本教程在它们之间添加了一个活塞:
所以只有两个两端有球的圆柱体,当我移动它们时,约束条件将它们指向彼此。球与各自的骨骼相连
这一切都很好,当我在Blender中播放动画时,活塞仍然很好地排列,并随着一切移动。但是,当我尝试导出它时,活塞的各个部分仍然与骨骼一起移动,但它们是分开的(因此不
我每晚都下载最新版本,正在尝试设置一个项目。我双击了gdx setup ui.jar文件,但它什么也没做。当我转到命令行(作为管理员)并运行:
java-jargdx安装ui.jar
这是吐出来的
C:\Libgdx\Libgdx-nightly-20140305>java-jar-gdx-setup-ui.jar
线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中的异常:新的c
hild是空的
位于javax.swing.tree.D
Hello,我是libgdx新手,我需要一些帮助,如果我的desktoplauncher分辨率是480x320,sprite占据80%的屏幕,但是如果1280x720,sprite很小,我需要让它在所有分辨率下看起来都一样,那么我该怎么做呢?对你来说可能很容易,但对我来说不是,我使用的是libgdx1.3.1
这是我的libgdx代码:
SpriteBatch batch;
Texture img;
Sprite mysprite;
@Override
public void create ()
我正在使用LibGDX制作一个游戏,我的舞台设置为输入处理器:
Gdx.input.setInputProcessor(stage);
一切都很好,但现在我想采取行动,刷(左和右)。我看到一些示例建议扩展GestureListener,并将其设置为输入处理器。但若我这样做了,那个么我的舞台就不再是输入处理器了。那么,如何获取触摸和滑动事件呢?如果您想要有多个输入处理器,则必须使用链接多个输入处理器的。例如:
InputMultiplexer multiplexer = new InputMul
我正在尝试在libgdx中绘制不断变化的形状,因此我认为使用sprite是行不通的,我想知道是否可以使用为每个像素调用的函数来绘制形状,以确定是否应该绘制
我需要画的是垫圈的一部分(一个由两个同心圆和两个半径限定的区域),圆圈和半径不断变化
我想知道的是,这里是否有一种方法可以绘制由函数决定的复杂形状(形状将由那些(x,y)组成,对于wich,函数(x,y)=true),而不是图像是否需要帮助
您可以创建一个pixmap:
Pixmap pixmap = new Pixmap(300, 300,
与所有涉及此错误的问题不同,此问题有点棘手
我有以下资料:
使用Glide v3将.png图像下载到我的应用程序的内部存储中,使用SimpleTarget获取位图并将其保存到文件中。
事实上,我知道这有时会保存损坏的文件,可能是由于超时问题
这没关系
当libgdx的AssetManager尝试呈现此文件时,问题就出现了
它抛出“无法加载资产的依赖项”错误
没关系
所以,我需要知道的是:
是否有办法捕获该错误,获取文件名将其删除并启动新的下载呼叫?
我已经试着做了:
正在寻找AssetMana
上一页 1 2 ...
4 5 6 7 8 9 10 ...
下一页 最后一页 共 34 页