En utilisant les touches fléchées et WASD simultanément
Je suis en train d'élaborer une partie à deux joueurs en Traitement (en cours d'exécution sur Java). Un utilisateur aura le contrôle de son personnage en utilisant les touches WASD et l'autre, le contrôle de mouvement en utilisant les touches fléchées. Le problème que j'ai c'est que l'utilisation keyPressed
nie WASD lorsque les flèches sont pressés et vice versa. J'ai été déconner avec elle pour un temps très long. Quelqu'un sait-il d'un travail autour ou remarquez quelque chose que je fais mal?
//global variables
int wide = 600; //canvas width
int tall = 600; //canvas height
int s = 50; //player size
float speed = 2.5; //player movement speed
//colors
int redColor = #CB4646; //player 1 color
int blueColor = #4652CB; //player 2 color
int backgroundColor = #DBE3B3; //background color
float player1X = 600/3-s; //HOW COME width/3 DOESN'T WORK??????????
float player2X = 600*2/3;
float playerY = 600/2-(s/2);
//players
Player player1 = new Player(player1X, playerY, s, speed, "wasd", redColor); //player 1
Player player2 = new Player(player2X, playerY, s, speed, "arrows", blueColor); //player 2
//setup
void setup(){
background(backgroundColor);
size(wide, tall);
smooth();
println(player2.controls);
}
//draw
void draw(){
background(backgroundColor);
player1.usePlayer();
player2.usePlayer();
}
class Player{
//class variables
float x; //x position
float y; //y position
int s; //size
float speed; //speed
String controls; //controls
int colors; //player color
char keyControls [] = new char [4];
//construct
Player(float tempX, float tempY, int tempS , float tempSpeed, String tempControls, int tempColors){
x = tempX;
y = tempY;
s = tempS;
speed = tempSpeed;
controls = tempControls;
colors = tempColors;
}
void usePlayer(){
//draw player
fill(colors);
rect(x, y, s, s);
//move player
keyPressed();
//wraparound
boundaries();
}
void keyPressed(){
//sets controls for wasd
if(controls == "wasd"){
if(key == 'w' || key == 'W'){
y -= speed; //move forwards
}
if(key == 's' || key == 'S'){
y += speed; //move backwards
}
if(key == 'd' || key == 'D'){
x += speed; //move right
}
if(key == 'a' || key == 'A'){
x -= speed; //move left
}
}
//sets controls for arrows
if(controls == "arrows"){
if(key == CODED){
if(keyCode == UP){
y -= speed; //move forwards
}
if(keyCode == DOWN){
y += speed; //move backwards
}
if(keyCode == RIGHT){
x += speed; //move right
}
if(keyCode == LEFT){
x -= speed; //move left
}
}
}
}
//pacman style wraparound
void boundaries(){
if(x == width) x = 2;
if(y == height) y = 2;
if(x == 0) x = width-s;
if(y == 0) y = height-s;
}
}
Est-ce lié au fait que les claviers ne pouvez pas enregistrer plus de 2 à 6 (selon lesquelles) touches à la fois?
Je ne pense pas car il ne fonctionne pas lorsque j'appuie sur seulement deux en même temps.
Remarque ce n'est pas réellement un Java question, mais un Traitement de la question. Le traitement est très spécifique de l'API avec un peu différente programmign modèle de Java (il se réécrit en java pour une utilisation hors connexion dans une JVM, mais il est réécrit pour JavaScript lors de l'utilisation en ligne dans un navigateur, par exemple)
merci pour l'info, je ne savais pas que! Je vais m'abstenir de poster le Traitement des questions avec Java balises dans l'avenir.
Je ne pense pas car il ne fonctionne pas lorsque j'appuie sur seulement deux en même temps.
Remarque ce n'est pas réellement un Java question, mais un Traitement de la question. Le traitement est très spécifique de l'API avec un peu différente programmign modèle de Java (il se réécrit en java pour une utilisation hors connexion dans une JVM, mais il est réécrit pour JavaScript lors de l'utilisation en ligne dans un navigateur, par exemple)
merci pour l'info, je ne savais pas que! Je vais m'abstenir de poster le Traitement des questions avec Java balises dans l'avenir.
OriginalL'auteur Brannon | 2013-02-12
Vous devez vous connecter pour publier un commentaire.
Le suivi de vos clés de manière indépendante, ne comptez pas sur l'événement globals.
Noter que ce doit être une série de if, parce que vous voulez pour gérer toutes les touches. Si quelqu'un tient à gauche et à droite, p1 se déplace à gauche et à droite.
Également noter que cet exemple de code n'a pas de filtre pour le plus-que-255 codes que vous obtenez pour les touches spéciales, de sorte que vous voulez probablement mettre un "if(keyCode>255) le retour" au début des gestionnaires d'événements.
speed
flotter comme un paramètre qui est incrémenté àx
ety
? Je suis juste un peu d'un problème de visualiser la façon dont je voudrais convertir monPlayer
classe. Aussi, je reçois le message d'erreur impossible de convertir de boolean int concernant ce codekeys[keyCode] = true;
.oui: l'utilisation de certains explicite de la logique pour déplacer votre joueur par certains à gauche/droite et haut/bas de la valeur, et de déterminer que la valeur de la fonction de chaque touche, qui est actuellement inscrit comme vers le bas. Donc, avant de vous tirer de vos joueurs, votre processus de toutes les touches qui sont en bas de cette image, puis vous appelez le tirage de joueur de la fonction. Aussi, le "ne peut pas convertir ..." erreur était parce que j'étais stupide et accidentellement dit d'utiliser int[] au lieu de boolean[] >_>
Merci beaucoup de l'aide! Je viens d'appliquer cette logique à mon programme et il déplacé les touches fléchées parfaitement. Il serait d'enregistrer deux touches à la fois et se déplacer en diagonale! Je suis cependant de la difficulté à obtenir les touches WASD pour un travail même si. Je pense qu'il a quelque chose à voir avec ce que vous propose ce qui concerne le fait qu'ils sont
key
paskeyCode
valeurs. À quoi ressemblerait-il afin de les obtenir à la fois de travailler?compris, merci encore!
OriginalL'auteur Mike 'Pomax' Kamermans
Est
key
une variable globale? Je ne le vois pas se passer pour le Joueur. Si c'est mondial, alors il ne peut contenir qu'une seule touche à la fois, ce qui exclut le contrôle de deux joueurs à la fois.OriginalL'auteur Patashu
Voici mon Arduino/Traitement code que j'ai utilisé pour gérer simultanée des touches (pour se déplacer en diagonale). Il résout le problème avec
boolean[] cannot be cast to int[]
l'erreur comme indiqué par @Brannon et utilise les codes de touches au lieu d'une clé.OriginalL'auteur Arthur Longbottom