- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做一个2D游戏,背景和精灵(视图)在屏幕上移动。
我想用滚动的方式制作游戏。我的意思是用户必须在屏幕顶部看到地平线,该地平线充满了屏幕尺寸的30%。地面必须滚动,并且必须为屏幕尺寸的70%。例如,如果我将汽车放在地面上,则汽车必须驶入一条正在滚动的道路,并且必须在屏幕上方的道路上方看到天空(地平线),并填满屏幕的30%。
我正在Google中搜索有关滚动游戏的内容,但找不到通过地平线实现这种滚动地面游戏的方法。
任何想法和方法都会被磨碎,我只是在研究如何做到这一点。
谢谢
最佳答案
这种效果可以通过多种方式来实现,这是我可以想到的一个非常基本的示例。
首先为您的地平线创建背景图像-带有阳光的蓝天会很好。现在为背景创建一些细节图像,例如云朵和小鸟。它们可以在背景图像上从左到右移动(反之亦然)。在渲染代码中,您将首先渲染“背景”图像,然后渲染“详细”图像。确保背景图像覆盖屏幕的35%左右,以便在渲染70%的地面层时有一些重叠-防止两层相交处出现孔。
接下来,为地面创建纹理图像。为此,我将使用静态图像,该图像具有与您要表示的内容(例如污垢)相对应的正确纹理类型。在此图像的顶部添加一些基本细节(例如山脉,树木等)可能也很好。
这应该在背景层之后渲染。
放置好此布局后,下一步就是模拟世界的深度。为此,您需要创建放置在“世界”中的对象(2D图像)。例如树木,岩石,房屋等。
要定义您的世界,您需要为每个对象存储2个坐标-x轴上的位置以及z轴上的深度值(您也可以使用y轴分量来包含高度,但是我会在此示例中忽略该信息)。
您还需要在相同的x和z轴上跟踪玩家的位置。随着玩家进入屏幕,这些值将实时更改-例如,z将根据速度更改,而x将根据操纵方向更改(例如)。
还要定义一个视距-距离播放器的物体可见单位的数量。
现在,一旦您以这种方式设置了世界,渲染就会给人一种进入屏幕的错觉。首先在地面层的底部渲染播放器对象。接下来,对于每个世界对象,计算它与玩家的距离-如果该距离在您定义的视图距离之内,则应将其渲染,否则可以忽略。
找到要渲染的对象后,您需要根据其与播放器的距离对其进行缩放。此缩放比例的公式如下所示:
distance_from_player_z = object.z - player.z
scale = ( view_distance - distance_from_player_z ) / view_distance
distance_from_player_x = object.x - player.x
x_render = player.x + ( distance_from_player_x / distance_from_player_z )
y_render = ( distance_from_player_z / view_distance ) * ( height_of_background_img );
// define the render size of background (resolution specific)
public final static float RENDER_SIZE_Y = 720.0f * 0.7f; // 70% of 720p
// define your view distance (in world units)
public final static float VIEW_DISTANCE = 10.0f;
// calculate the distance between the object and the player (x + z axis)
float distanceX = object.x - player.x;
float distanceZ = object.z - player.z;
// check if object is visible - i.e. within view distance and in front of player
if ( distanceZ > 0 && distanceZ <= VIEW_DISTANCE ) {
// object is in view, render it
float scale = ( VIEW_DISTANCE - distanceZ ) / VIEW_DISTANCE;
float renderSize = ( object.size * scale );
// calculate the projected x,y values to render at
float renderX = player.x + ( distanceX / distanceZ );
float renderY = ( distanceZ / VIEW_DISTANCE ) * RENDER_SIZE_Y;
// now render the object scaled to "renderSize" at (renderX, renderY)
}
关于android - 制作背景滚动游戏的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16911206/
如果附加了 'not-scroll' 类,我希望我的 body 不滚动,否则它应该正常工作。 我已经搜索这个问题两天了,但找不到任何适合我的解决方案。 我想要的是向 body 添加一个 class,并
我发现似乎是 iOS Safari 中的错误(我正在 iOS 8 上进行测试)。当绝对定位的 iFrame 漂浮在一段可滚动内容上方时,滚动 iFrame 也会滚动下面的内容。以下 HTML (ava
我有以下代码来显示一系列投资组合图片,这些图片以 SVG 格式存储在滚动 div 中: 在 Safari 中滚动使用两根手指或鼠标滚轮当光标位于 SVG 之一上时不起作用。 该页
我想用 javascript 做的是: 一旦你向下滚动页面,将#sidebar-box-fixed 的位置从 position: relative; 更改为定位:固定;。改回position:rela
我对 Elasticsearch 的滚动功能有点困惑。在 elasticsearch 中,每当用户在结果集上滚动时,是否可以每次调用搜索 API?来自文档 "search_type" => "scan
我试图做到这一点,以便当我向上或向下滚动页面时,它会运行不同的相应功能。我发现了一个类似的问题here但我已经尝试了他们的答案并且没有运气。 注意:此页面没有正常显示的滚动条。没有地方可以滚动。 bo
(C语言,GTK库) 在我的表单上,我有一个 GtkDrawingArea 小部件,我在上面使用 Cairo 绘制 GdkPixbufs(从文件加载)。我想要完成的是能够在窗口大小保持固定的情况下使用
最近我一直在尝试创建一个拉到(刷新,加载更多)swiftUI ScrollView !!,灵感来自 https://cocoapods.org/pods/SwiftPullToRefresh 我正在努
我正在开发一个应用程序,其中有两个带有可放置区域的列表和一个带有可拖动项目的侧面菜单。 当我滚动屏幕时,项目的位置困惑。 我试图在谷歌上寻找一些东西,最后得到了这个问题:jQuery draggabl
我在 UIWebView 中加载了一个 HTML 表单,而我的 UIWebView 恰好从 View 的中间开始并扩展。我必须锁定此 webView 不滚动并将其放在 ScrollView 之上以允许
如何在每个元素而不是整个元素上应用淡入淡出(与其高度相比)? HTML: CSS: * { padding: 0; margin: 0; box-sizing: border
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
我制作这个程序是为了好玩,但我被卡住了,因为程序在屏幕外运行。如何在不完全更改代码的情况下实现滚动条。 public static void main(String args[]) throws IO
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
使用 jquery 技术从 css-tricks.com 获得滚动/跟随侧边栏,如果您不知道我在说什么,这里是代码: $(function() { var $sidebar = $
我是 jQuery Mobile 新手。我需要向我的应用程序添加 Facebook 滑动面板功能。 我经历了 sliding menu panel ,它工作正常,但我在菜单面板中的内容超出了窗口大小,
有没有办法在 js 或 jQuery 或任何其他工具中检测 ctrl + 滚动。我正在尝试执行一些动态布局代码,我需要检测不同分辨率下的屏幕宽度,我通过使用 setTimeout() 的计时器实现了这
我有一部分html代码:
我想控制 RichTextBox 滚动,但在控件中找不到任何方法来执行此操作。 这样做的原因是我希望当鼠标光标位于 RichTextBox 控件上时鼠标滚轮滚动有效(它没有事件焦点:鼠标滚轮事件由表单
我是一名优秀的程序员,十分优秀!