首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于max的Python,FreePIE仿真器模型

用于max的Python,FreePIE仿真器模型
EN

Stack Overflow用户
提问于 2021-11-13 07:14:50
回答 2查看 141关注 0票数 2

我有一个小小的python脚本,它可以在PC上行走。他使用freePie来模拟操纵杆,这样你就可以和shift和Ctrl (马克斯走路的速度)进行切换。问题是,脚本操纵杆在试图模仿鼠标和键盘来模仿操纵杆时,感觉非常粘粘和缓慢,而且似乎无法通过它。这是剧本

代码语言:javascript
复制
# Walk Toggle script for Mad Max (PC)
# by STELLAR-7 Project

# Starting variables
if starting:
    vJoy[0].x = 0
    vJoy[0].y = 0
    vJoy[0].z = 0
    vJoy[0].rx = 0
    vJoy[0].ry = 0
    vJoy[0].rz = 0
    up = 0
    left = 0
    down = 0
    right = 0
    isMoving = 0
    moveMode = 0
    axisMax = vJoy[0].axisMax
    axis = axisMax * 0.85
    mouseSmooth = 0
    mouseSens = 5000
    

# Movement toggle RUN-JOG-WALK key (LeftControl)
if keyboard.getPressed(Key.NumberPad0): 


if keyboard.getPressed(Key.LeftControl):
    if moveMode > 0:
        moveMode -= 1
    if moveMode == 0:
        axis = axisMax * 0.75
    else:
        axis = axisMax * 0.81
# Movement toggle WALK-JOG-RUN key (LeftShift)
elif keyboard.getPressed(Key.LeftShift):
    if moveMode < 2:
        moveMode += 1
    if moveMode == 1:
        axis = axisMax * 0.81
    else:
        axis = axisMax

# Get keyboard movement (WASD)
if keyboard.getKeyDown(Key.W):
    isMoving = 1
    up = 1
else:
    up = 0

if keyboard.getKeyDown(Key.A):
    isMoving = 1
    left = 1
else:
    left = 0

if keyboard.getKeyDown(Key.S):
    isMoving = 1
    down = 1
else:
    down = 0

if keyboard.getKeyDown(Key.D):
    isMoving = 1
    right = 1
else:
    right = 0

# Process movement
# Diagonals first...
if up == 1 and right == 1:
    vJoy[0].x = axis * 0.7
    vJoy[0].y = -axis * 0.7
elif up == 1 and left == 1:
    vJoy[0].x = -axis * 0.7
    vJoy[0].y = -axis * 0.7
elif down == 1 and left == 1:
    vJoy[0].x = -axis * 0.7
    vJoy[0].y = axis * 0.7
elif down == 1 and right == 1:
    vJoy[0].x = axis * 0.7
    vJoy[0].y = axis * 0.7
elif up == 1:
    vJoy[0].x = 0
    vJoy[0].y = -axis
elif left == 1:
    vJoy[0].x = -axis
    vJoy[0].y = 0
elif down == 1:
    vJoy[0].x = 0
    vJoy[0].y = axis
elif right == 1:
    vJoy[0].x = axis
    vJoy[0].y = 0
else:
    isMoving = 0
    vJoy[0].x = 0
    vJoy[0].y = 0

# Mouse look
if isMoving == 1:
    vJoy[0].z = -mouse.deltaX * mouseSmooth
    vJoy[0].ry = mouse.deltaY * mouseSmooth
    if mouseSmooth < mouseSens:
        mouseSmooth += 10
else:
    mouseSmooth = 0
    vJoy[0].z = 0
    vJoy[0].ry = 0

有什么办法可以让脚本完全停止在一个按钮,切换或按键。有点像开着关着的。例如,如果我按下numpad0,脚本就必须停止工作,因为车辆中的控件是无法使用的。不过,这需要在游戏中实现。这个剧本能改一点吗?或者甚至在鼠标活动的时候停止工作。

这是最初的国防部。https://www.nexusmods.com/madmax/mods/9?tab=posts

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-09 06:13:39

您添加了一个变量,当设置为1时,该变量将停止游戏,例如:

代码语言:javascript
复制
# Starting variables
if starting:
    stopGame = 0
     :
     :
if keyboard.getPressed(Key.NumberPad0):
    stopGame = 1 - stopGame

# authorize all actions you want when stopGame ==0
# and of course you could do some operation when stopGame ==1
if stopGame == 0:  
    # Get keyboard movement (WASD)
    if keyboard.getKeyDown(Key.W):
       isMoving = 1
       up = 1
    else:
       up = 0
    :
    :
票数 1
EN

Stack Overflow用户

发布于 2021-12-09 06:42:00

代码语言:javascript
复制
# Walk Toggle script for Mad Max (PC)
# by STELLAR-7 Project

# Starting variables
if starting:
    stopGame = 0
    vJoy[0].x = 0
    vJoy[0].y = 0
    vJoy[0].z = 0
    vJoy[0].rx = 0
    vJoy[0].ry = 0
    vJoy[0].rz = 0
    up = 0
    left = 0
    down = 0
    right = 0
    isMoving = 0
    moveMode = 0
    axisMax = vJoy[0].axisMax
    axis = axisMax * 0.85
    mouseSmooth = 0
    mouseSens = 5000
    

# Movement toggle RUN-JOG-WALK key (LeftControl)
if keyboard.getPressed(Key.NumberPad0):
    stopGame = 1 - stopGame


if keyboard.getPressed(Key.LeftControl):
    if moveMode > 0:
        moveMode -= 1
    if moveMode == 0:
        axis = axisMax * 0.75
    else:
        axis = axisMax * 0.81
# Movement toggle WALK-JOG-RUN key (LeftShift)
elif keyboard.getPressed(Key.LeftShift):
    if moveMode < 2:
        moveMode += 1
    if moveMode == 1:
        axis = axisMax * 0.81
    else:
        axis = axisMax

if stopGame == 0:
# Get keyboard movement (WASD)
    if keyboard.getKeyDown(Key.W):
        isMoving = 1
        up = 1
else:
        up = 0

if keyboard.getKeyDown(Key.A):
    isMoving = 1
    left = 1
else:
    left = 0

if keyboard.getKeyDown(Key.S):
    isMoving = 1
    down = 1
else:
    down = 0

if keyboard.getKeyDown(Key.D):
    isMoving = 1
    right = 1
else:
    right = 0

# Process movement
# Diagonals first...
if up == 1 and right == 1:
    vJoy[0].x = axis * 0.7
    vJoy[0].y = -axis * 0.7
elif up == 1 and left == 1:
    vJoy[0].x = -axis * 0.7
    vJoy[0].y = -axis * 0.7
elif down == 1 and left == 1:
    vJoy[0].x = -axis * 0.7
    vJoy[0].y = axis * 0.7
elif down == 1 and right == 1:
    vJoy[0].x = axis * 0.7
    vJoy[0].y = axis * 0.7
elif up == 1:
    vJoy[0].x = 0
    vJoy[0].y = -axis
elif left == 1:
    vJoy[0].x = -axis
    vJoy[0].y = 0
elif down == 1:
    vJoy[0].x = 0
    vJoy[0].y = axis
elif right == 1:
    vJoy[0].x = axis
    vJoy[0].y = 0
else:
    isMoving = 0
    vJoy[0].x = 0
    vJoy[0].y = 0

# Mouse look
if isMoving == 1:
    vJoy[0].z = -mouse.deltaX * mouseSmooth
    vJoy[0].ry = mouse.deltaY * mouseSmooth
    if mouseSmooth < mouseSens:
        mouseSmooth += 10
else:
    mouseSmooth = 0
    vJoy[0].z = 0
    vJoy[0].ry = 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69952255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档