我目前正在使用平铺地图为pygame中的游戏制作地图编辑器.该级别由以下结构中的块构建(尽管更大):
level1 = (
(1,1,1,1,1,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,1,1,1,1,1))
Run Code Online (Sandbox Code Playgroud)
其中"1"是一个墙,而"0"是一个空的空间.
以下代码基本上是处理块类型更改的代码:
clicked = pygame.mouse.get_pressed()
if clicked[0] == 1:
currLevel[((mousey+cameraY)/60)][((mousex+cameraX)/60)] = 1
Run Code Online (Sandbox Code Playgroud)
但由于级别存储在元组中,我无法更改不同块的值.如何以简单的方式更改关卡中的不同值?
考虑Parameters实用程序类型,其底层类型是元组:https ://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype
我有一个功能SomeFunction。要将函数的参数用作类型,我编写Parameters<SomeFunction>.
现在假设我想使用函数的参数作为除第一个参数之外的类型。
显然对于数组我会使用类似的东西...args.slice(1)。但我不知道用于 Typescript 定义的切片实用程序。Omit仅适用于对象。
这个问题的答案提供了一个RemoveFirstFromTuple实用程序。但这有点复杂。是否有一种内置方法可以在类型定义中提取元组的一部分?
假设我有这些类型
/** Types of a function's arguments */
export type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;
export type ExcludeQueryParams<T> = { [P in keyof T]: T[P] extends PagingParameters ? never : T[P] }
Run Code Online (Sandbox Code Playgroud)
然后我有这段代码来提取函数的参数类型
function test(query: PagingParameters, as: number, f: string) {
return 1;
}
type argTypes = ArgumentTypes<typeof test>
type result = ExcludeQueryParams<argTypes>
Run Code Online (Sandbox Code Playgroud)
上面,argTypes 将等于 [PagingParameters, number, string]
我想要做的是PagingParameters从数组中提取类型 so resultis [number, string],但是使用ExcludeQueryParams结果是[never, …
我原来的问题是这样的。
我做了以下类型,但由于循环引用错误它不起作用,我不知道如何解决它:
type Increment<T extends number, Tuple extends any[] = [any]> =
T extends 0 ? 1 :
T extends 1 ? 2 :
T extends TupleUnshift<any, Tuple> ?
TupleUnshift<any, TupleUnshift<any, Tuple>>['length'] :
Increment<T, TupleUnshift<any, TupleUnshift<any, Tuple>>>
Run Code Online (Sandbox Code Playgroud)
最后它应该像这样工作:
type five = 5
type six = Increment<five> // 6
Run Code Online (Sandbox Code Playgroud)
PSTupleUnshift来自这里。