我刚刚开始使用Haskell,并希望在不安装其他库的情况下制作简单的实时游戏.我需要编写一个扫描键盘输入的循环,但如果没有输入,游戏也必须运行.我该怎么做呢?
我是Phaser3 的新手,在开始一个疯狂的项目之前,我想知道我应该如何开始,在场景之间切换。我看到有几个功能,启动,启动,切换,运行,恢复,暂停等。
例如,假设我想要 2 个场景,一个菜单和一个游戏。我在菜单上启动,我想进入游戏场景,如果我点击一个按钮,然后回到菜单场景。
我已经通过调用启动功能实现了这一点,但我注意到,所有的,init,preload和create函数的调用每一次,所以我加载的所有图像,将所有听众一遍又一遍。
这似乎是错误的,我应该使用启动或切换功能并暂停和恢复吗?但是如何隐藏之前的场景呢?
提前致谢。
我正在编写一种算法,以给定的速度遍历数组的元素。我用它来遍历我发现的一系列路径中的游戏地图上的单元格。
我需要用新数组调用新函数时,最后一个函数调用停止工作。
单击鼠标,即可沿路径移动。现在,如果我们调用第一个函数,它将沿着该路径运行,但是,如果在该路径的末尾之前,使用新路径再次调用该函数,则这两个函数将继续更改当前坐标。
对象必须在第一次调用该函数时所到达的位置中断其路径,并在第二个函数调用中继续其路径。
这是它现在如何工作的示例代码:
let coord = {x:0,y:0}
let goByPath = (path=[],coord={})=>{
let i = 0;
pathIteration(i,path,coord)
}
let pathIteration = (i,path,coord)=>{
if(i++<path.length){
setTimeout(()=>{
coord = path[i-1];
console.log(coord);
pathIteration(i,path,coord);
},500);
}
return i;
};
path1 = [{x:0,y:1},{x:1,y:1},{x:1,y:2},{x:2,y:2}];
path2 = [{x:1,y:3},{x:1,y:4},{x:1,y:5}];
goByPath(path1, coord);
setTimeout(()=>{
goByPath(path2, coord);
},900);Run Code Online (Sandbox Code Playgroud)
现在输出到控制台:
{
"x": 0,
"y": 1
}
{
"x": 1,
"y": 1
}
{
"x": 1,
"y": 3
}
{
"x": 1,
"y": 2
}
{
"x": 1,
"y": 4
}
{
"x": …Run Code Online (Sandbox Code Playgroud) 当尝试打印“Hello, world!”时 使用 Bevy 到屏幕上时,文本不会显示,直到我导入第三方字体文件并将其作为资源加载以用作组件TextStyle值中的字体值Text。在使用该字体之前,我没有明确指定该字体;我刚刚使用了来自 的值Default::default(),即WeakHandle<Font>(Id(97059ac6-c9ba-4da9-95b6-bed82c3ce198, 0))。这似乎意味着 Bevy 找到了错误的字体,或者至少是默认情况下无法使用的字体。这更有可能是我的系统提供的字体问题还是 Bevy 默认字体功能的问题?
这是一个最小的可重现示例:
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_startup_system(setup)
.run();
}
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn_bundle(UiCameraBundle::default());
commands.spawn_bundle(TextBundle {
text: Text::with_section(
"Hello, world!",
TextStyle {
font_size: 60.0,
color: Color::WHITE,
font: asset_server.load("FiraSans-Bold.ttf")
},
Default::default()
),
..Default::default()
});
}
Run Code Online (Sandbox Code Playgroud)
该代码有效。当我将字体值从 更改为 时asset_server.load("FiraSans-Bold.ttf"),Default::default()屏幕上没有显示任何内容。
我正在尝试创建一款多人拼图游戏。
我的第一个方法是使用<canvas>2D 渲染上下文,但我尝试得越多,我就越认为不切换到 WebGL 是不可能的。
这是我得到的一个例子:
在本例中,我要渲染一个 1900x1200 像素的图像,并将其切割成 228 个部分,但我希望游戏能够以更高分辨率渲染数千个部分。
每一块都是使用具有随机变化的贝塞尔曲线和直线按程序生成的,这给了我这样的结果:
我需要独立渲染每个部分,因为玩家可以拖放它们来重建拼图。
起初,我只有一个<canvas>,我使用了该clip()方法,然后drawImage()对每个部分进行调用。
但当尝试以 60fps 渲染数百个片段时,很快就遇到了性能问题(我在一台旧笔记本电脑上运行它,但我觉得这不是问题)。
这是我正在使用的代码的缩短版本:
class PuzzleGenerator {
public static generatePieces(
puzzleWidth: number,
puzzleHeight: number,
horizontalPieceCount: number,
verticalPieceCount: number,
): Array<Piece> {
const pieceWidth = puzzleWidth / horizontalPieceCount;
const pieceHeight = puzzleHeight / verticalPieceCount;
const pieces: Array<Piece> = [];
for (let x = 0; x < horizontalPieceCount; x++) {
for (let y = 0; y < verticalPieceCount; y++) …Run Code Online (Sandbox Code Playgroud) javascript performance game-development html5-canvas typescript
我正在使用python中的多人游戏,它使用套接字库进行网络连接.该游戏将支持局域网上的游戏.一个玩家将设置服务器,LAN上的其他玩家将能够加入游戏.
为了实现这一点,我需要一种简单的方法让玩家发现可用服务器列表(玩家不应该被要求输入IP地址!).我首选的解决方案只使用python套接字库(以及标准库的其他部分).
我要找的是客户端和服务器代码:
客户端:向在LAN上某个端口上侦听的所有计算机广播其游戏请求
server(s):以可用性回复客户端
根据Hans在下面的回答中提出的建议,可以使用UDP套接字来响应来自客户端的广播请求.
服务器:
#UDP server responds to broadcast packets
#you can have more than one instance of these running
import socket
address = ('', 54545)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
server_socket.bind(address)
while True:
print "Listening"
recv_data, addr = server_socket.recvfrom(2048)
print addr,':',recv_data
server_socket.sendto("*"+recv_data, addr)
Run Code Online (Sandbox Code Playgroud)
客户:
#UDP client broadcasts to server(s)
import socket
address = ('<broadcast>', 54545)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
data = "Request"
client_socket.sendto(data, address)
while True:
recv_data, addr = client_socket.recvfrom(2048)
print addr,recv_data …Run Code Online (Sandbox Code Playgroud) 我有一个包含大量文件夹的存储库,但我想为其中一个文件夹创建版本.
更简单的故事,它适用于游戏服务器,我只想为客户创建版本,作为向玩家提供客户端下载的方式.
我一直在阅读有关 wgpu-rs 的内容,如果用于构建本机桌面应用程序,它会使用 Vulkan、Dx12、Metal 等。鉴于此,我们是否可以期望 wgpu-rs 和直接使用 vulkan 之间具有可比的性能?我是图形编程领域的业余爱好者,但一直在 Rust 中开发一款游戏,一旦 wgpu-rs 支持就能够构建 wasm 的想法非常有吸引力。
目前我使用两个物体(彗星和飞船)的位置来检测它们是否发生碰撞。
fn collision_detection(
comets: Query<&Transform, With<Comet>>,
mut ships: Query<(&Transform, &mut ShipStatus), With<Ship>>,
) {
for comet in comets.iter() {
for (ship, mut status) in ships.iter_mut() {
if comet.translation.x < ship.translation.x + 80.0 && comet.translation.y < ship.translation.y + 80.0
&& comet.translation.x > ship.translation.x - 80.0 && comet.translation.y > ship.translation.y - 80.0 {
status.dead = true;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法来做到这一点。
我正在开发一个程序生成系统,并且希望能够在 bevy rust 中逐帧修改网格。
我尝试过使用,assets.get_mut()但这会导致错误:help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `bevy::prelude::Res<'_, bevy::prelude::Assets<bevy::prelude::Mesh>>
任何帮助将不胜感激。
我当前的代码大致如下:
// Function which is executed at the very start
fn setup (
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
asset_server: Res<AssetServer>
) {
let mut mesh = Mesh::from(bevy::prelude::shape::Icosphere { radius: 0.5, subdivisions: 10 });
commands.spawn()
.insert_bundle(PbrBundle {
mesh: meshes.add(mesh),
material: materials.add(colour.into()),
..Default::default()
})
.insert(Transform::from_xyz(0.0, 0.0, 0.0));
}
// Function which is …Run Code Online (Sandbox Code Playgroud) game-development ×10
rust ×4
bevy ×3
javascript ×2
github ×1
haskell ×1
html5-canvas ×1
kivy ×1
networking ×1
performance ×1
python ×1
release ×1
rendering ×1
typescript ×1
vulkan ×1
webgpu ×1