עבור לתוכן

איך לטפל בשתי פקודות מהמקלדת בו זמנית?(עבור משחק בC#)

Featured Replies

פורסם

שלום לכולם!

אני כותב משחק בשפת C# , ובמשחק יש אופציה לשני שחקנים שכל אחד עובד על לוח אחר ויש בינהם תחרות, לכל אחד יש את הלחצנים המיועדים לו, אבל במקרה ששחקן אחד לוחץ על הלחצן שלו בצורה רצופה הוא למעשה מונע מהשני לזוז עם הלחצנים שלו, האם יש למישהו פיתרון? ברור שיש משהו כי זה כמו תחרות בין שני שחקנים במרוץ מכוניות למשל.

תודה מראש.

פורסם
  • מחבר

מה אז זה פשוט תלוי במקלדת? אבל זה לא יכול היות כי עובדה שמשווקים משחקים לכולם שדורשים זאת ולא באים עם הוראה למקלדת מסוימת............ ???

פורסם

תעשה נסיון בעצמך.

פתח Notepad, תלחץ על S באופן רציף ואז תלחץ על אות אחרת.

פורסם
  • מחבר

נו ניסיתי, מה הרוחתי? אז כל פעם הוא מתייחס להקלדה האחרונה, בקיצור אין לזה פתרון תכנותי?

פורסם

היי, לצערי אין לי נסיון בזה. אבל חשבת על האפשרות להוסיף האזנה על המקרים של לחיצת כפתור ושיחרור כפתור?

פורסם

אולי שתחפש משהו בC או אסמבלי ? אני חופר בgmedev.net - אך ללא הועיל עד כה...

פורסם

אני לא יודע איך אתה אמור לעשות את זה ב-#C אבל ברמה העקרונית אפשר להשטלת על פסיקת המקלדת. אבל אני לא בטוח אם זה יעבוד בסביבה מוגנת כמו windows.

הנה קוד שכתבתי להצגת כל המקשים הלחוצים בכל רגע נתון. קח בחשבון שזה מציג את הקוד מקלדת ולא קוד ASCII. בקוד מקלדת כאשר הביט העליון דלוק זה שיחרור וכשהוא מכובה זה לחיצה.

#include<stdio.h>
#include<conio.h>
#include<dos.h>

void interrupt (*old_int9)(void);

char keyboard[128];
int kbevent=0;

void interrupt new_int9()
{
char scancode;

kbevent=1;
asm{
push ax
in al,60h
mov scancode,al
pop ax
}

if (scancode&0x80)
keyboard[scancode&0x7F]=0;
else
keyboard[scancode&0x7F]=1;
old_int9();
}


void main (void)
{
int i;
char ch;
clrscr();
for (i=0;i<127;i++)
keyboard[i]=0;

old_int9=getvect(9);
setvect(9,new_int9);

while (!keyboard[1])
if (kbevent)
{
if (kbhit())
getch();
kbevent=0;
clrscr();
printf("Keyboard: ");
for (i=0;i<127;i++)
if (keyboard[i])
printf("%d ",i);
}
ch=getch();
setvect(9,old_int9);
}

פורסם

טוב, עכשיו רק נשאר למצוא .NET ל DOS וזהו...

פורסם

זה היה רק בשביל להדגים את הרעיון, למרות שגם וינדוס עדיין משתמשת בפסיקות חומרה, אבל לא תוכל להשטלת עליהן כי זו סביבה מוגנת (protected mode).

פורסם
  • מחבר

תודה רבה על כל התגובות, אבל האם יש מישהו שיכול להגיד לי צעד אחרי צעד מה לעשות?, (האם ניראה שזה בילתי אפשרי?!)

פורסם

אם זה פרוייקט WINFORMS, פשוט תירשם ב FORM שאתה מעוניין ל EVENTS של KEYDOWN/KEYUP או KEYPRESS ותדאג (חשוב מאוד) להדליק את הדגל של KEYPREVIEW ב FORM עצמו.

פורסם

זה בPROPERTIES של הFORM ?

פורסם

ה KEYPREVIEW כן והשאר זה ב EVENTS.

פורסם

ואיך מגיעים לEVENTS ?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים