gpt4 book ai didi

java - 游戏 "Need for Speed Most Wanted"不能被Java类Robot控制

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:22 24 4
gpt4 key购买 nike

我使用 Java Robot 编写了一个用于控制赛车游戏的机器人。该机器人在 Need For Speed Underground 中运行良好,但“向下”键除外(上、左、右键运行良好)。但是我的机器人无法控制极品飞车最高通缉

机器人工作正常,但游戏不接受模拟的按键事件。我做了一些搜索,发现该游戏是基于 DirectX 的。在 DirectX 中,键盘/鼠标事件是特殊的。游戏似乎直接“询问”键盘,而不是通过 Windows。我在 CS 中尝试了我的程序,发现它工作得很好。

我在 Windows 7 中编程,使用 Eclipse 和 Java 1.6。所以想问下为什么极品飞车最高通缉不接受模拟按键事件,这个程序怎么解决?谢谢。

最佳答案

I wrote a bot for controlling racing game using Java Robot.

您生成什么 KeyEvents?

For Java Robot's simulated key events like "VK_Up, VK_Down,Vk_Left,VK_Right", the "Need for Speed Most Wanted" ignored. But, for keys "A-Z", the game accepted!

也许您正试图在您应该使用 keyPressed 和 keyReleased 时生成 keyTyped 事件?

这是一个使用右/左/上向下键的简单示例。尝试输入 (1, 2, 3) 然后退格到开头并输入 (0)。然后按播放按钮。

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

public class RobotPlayback extends JFrame implements KeyListener, ActionListener
{
JTextField textField1;
JTextField textField2;
List playback = new ArrayList();

public RobotPlayback()
{
textField1 = new JTextField(30);
textField1.addKeyListener( this );
getContentPane().add(textField1, BorderLayout.NORTH);
//
JButton button = new JButton("Playback");
button.addActionListener( this );
button.setFocusable(false);
getContentPane().add(button);
//
textField2 = new JTextField(30);
getContentPane().add(textField2, BorderLayout.SOUTH);
}

public void keyPressed(KeyEvent e)
{
playback.add(e);
}

public void keyReleased(KeyEvent e)
{
playback.add(e);
}

public void keyTyped(KeyEvent e) {}

public void actionPerformed(ActionEvent e)
{
Thread playback = new Thread()
{
public void run()
{
playback();
}
};
playback.start();
}

private void playback()
{
textField2.requestFocus();

try
{
Robot robot = new Robot();
robot.setAutoDelay( 200 );

for (int i = 0; i < playback.size();i++)
{
KeyEvent event = (KeyEvent)playback.get(i);

if (event.getID() == KeyEvent.KEY_PRESSED)
robot.keyPress( event.getKeyCode() );
else
robot.keyRelease( event.getKeyCode() );
}
}
catch(Exception exc)
{
System.out.println(exc);
}

setVisible(true);
playback = new ArrayList();
textField1.requestFocus();
}

public static void main(String[] args)
throws Exception
{
JFrame frame = new RobotPlayback();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}

I registered the account just in this morning and 11 reputations only. Not enough for upvoting

即使有 11 分,如果它回答了您的问题,您也应该能够“接受”答案。

关于java - 游戏 "Need for Speed Most Wanted"不能被Java类Robot控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com