نمایش نتایج 1 تا 16 از 16

نام تاپیک: 2-3 تا سوال در مورد یه برنامه گرافیکی

  1. #1

    Tick 2-3 تا سوال در مورد یه برنامه گرافیکی

    سلام دوستان
    من دارم یه بازی ماشین نسبتا ساده با اسمبلی می نویسم . تا اینجا تازه تونستم طرح بازی رو پیاده کنم و هنوز هیچ حرکتی انجام نمیشه. (عکس)
    برای ادامه کار به چند مشکل برخوردم :
    - من یه پروسیجر نوشتم که یک x و y1 و y2 رو می گیره و یه خط عمودی می کشه.ومثلا برای رسم جاده این پروسیجر برای x های از 200 تا 440 فراخوانی میشه(یعنی 240 بار)و در هر بار فراخوانی یه خط از y=0 تا y=480 میکشه .
    مشکل اینه که این کار تقریبا 5 ثانیه طول میشکه و رسم این خطوط مثل یه انیمیشن قابل رویته. که این مشکل سازه . نمی دونم این طبیعیه یا نه!!!!
    - در زبونهای ویژوال یه کنترل timer داریم که می تونیم بهش بگیم مثلا هر 200ms یه کاری رو برامون انجام بده. من برای حرکت دادن خطوط سفید وسط جاده - که نمایانگر حرکت ماشین هستند - به همچین چیزی نیاز دارم که مثلا هر 50ms خطوط سفید 5 پیکسل پایین تر بیایند.آیا می توان چنین چیزی رو شبیه سازی کرد؟
    - من می خوام برنامه مدام منتظر فشردن یک کلید از صفحه کلید باشه تا هروقت کلید چپ فشرده شد ماشین به سمت چپ برود و ... برای این کار باید چه کنم؟

    منو ببخشید که اینقدر طولانی شد . خوشحال میشم راهمایی هاتون رو بشنوم.
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: jpg 1.jpg‏ (38.2 کیلوبایت, 26 دیدار)

  2. #2
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    بهتر بود مشخص می کردید که این برنامه رو چه OS و چه مودی کار می کنید.
    با فرض اینکه تو 80x86 و RealMode برنامتونو می نویسید در این صورت احتمالا از وقفه های bios برای اینکار استفاده کردید که خیلی کند هستن. بهتره ترسیمات رو خودتون مستقیم در VIDEO RAM انجام بدید تا مشکل کندی رفع بشه.

    لطفا محیط کار خود را مشخص کنید تا با خیال راحتتر بتوان به آنها پاسخ داد.
    آخرین ویرایش به وسیله Delphi Coder : جمعه 23 آذر 1386 در 19:43 عصر دلیل: سوال ناقص است

  3. #3
    نقل قول نوشته شده توسط Delphi Coder مشاهده تاپیک
    با فرض اینکه تو 80x86 و RealMode برنامتونو می نویسید در این صورت احتمالا از وقفه های bios برای اینکار استفاده کردید که خیلی کند هستن. بهتره ترسیمات رو خودتون مستقیم در VIDEO RAM انجام بدید تا مشکل کندی رفع بشه.
    سلام . حدستون درسته ولی نمی دونم چطور باید مستقیم در video ram بنویسم. ممکنه یه راهنمایی کنین.

  4. #4
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    اولا عرض ارادت دارم خدمتتون به خاطر همین علاقه و تحقیقی که دارید. در مورد سوالی که فرمودید حقیقتش ایجاشو خودوم هم دقیق نمیدوم یعنی مشکل خود من هم بود یه زمانی ولی به خاطر اینکه باید سویچ میکردم روی برنامه نویسی ویندوز یه سری از تیپ این سوالات همونجوری مجهول دفن شد توی ذهنم. فقط میدونم که نباید از bios برای set کردن pixel ها استفاده کرد bios همینه که هست و کاریشم نمیشه کرد. سوال شما رو که دیدم تصمیم گرفتم یکی دو روز روش کار کنم چون خودم هم علاقه زیادی به این موضوع دارم. من به زودی نتیجه کارمو ایجا میگم بهتون شما هم اگه چیزی پیدا کردید ممنون میشم اگه همینجا Share کنید .
    در مورد Timer نگران نباشید وقفه 8 رو داریم که نرمال ثانیه ای
    18/2
    بار تیک میزنه که میشه مقدارشو به دلخواه تنظیم کرد. در مورد کلید هم وقفه 16 تابع 1 واسه همون کاره تابع 0 وامی ایسته تا کلید فشار داده بشه ولی به درد شما نمی خوره چون کارای دیگه ای توی برنامتون باید انجام بشه. راستی اگر Reference خوبی برای وقفه ها پورت ها و آدرسهای bios و این چیزا ندارین می تونید از helppc استفاده کنید یکی دو تا تاپیک بالاتر یا پایینتر ضمیمه یکی از Post هام کردم.

  5. #5
    ممنون از راهنمایتون
    int list رو هم گرفتم . خیلی کارامده.
    ولی در مورد وقفه 8 که همراه با 1c استفاده میشه و همچنین وقفه 16 تابع 1 برای کیبورد نتونستم کاری بکنم. در واقع انگار روش استفاده از این وقفه ها یه مقدار متفاوت با بقیه است.
    میشه طریقه بکاربردن این دو وقفه رو بگید . اگه چند خط کد باشه بهتره!!!
    در مورد وقفه timer می دونم که باید در آدرس وقفه 1c پرویسجرم رو قرار بدم و از اونجا به یه جای دیگه که این وقفه رو انتقال دادم پرش کنم ولی با توجه به اطلاعات کمم از اسمبلی این کار رو بلد نیستم. اگه کدی دارید برای این کار ممنون میشم اگه بدستم برسه .
    thanks

  6. #6
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    دو برنامه کوچک به اسمهای vga و clock ضمیمه کردم که فکر میکنم از بهتر از هر توضیح دیگری باشند. برنامه vga نحوه نوشتن روی VideoRam را در مد 13 و 256 رنگ نشان میدهد و برنامه Clock چگونگی Hook کردن وقفه1c. این برنامه وقفه 1C را Hook کرده و در هر بار اجرای وقفه ساعت جاری سیستم را در گوشه سمت راست بالای صفحه نشان میدهد.
    فایل های ضمیمه فایل های ضمیمه

  7. #7
    واقعا ممنون از راهنماییتون
    مشکل من در مورد سرعت پایین رسم اشکال کاملا حل شد.
    ولی در مورد وقفه 1c چیزی دستگیرم نشد. در واقع همون فایل clock هم اجرا که میشه هیچ اتفاقی نمی افته (یا اگه می افته من متوجه نشدم!!!) . احساس من اینه که این برنامه کاری بیش از چیزی که من میخوا داره انجام میده . من می خواهم این برنامه رو جوری تغییر بدم که پروسجری که فراخونی میشه مثلا یه کاکتر چاپ کنه . در نتیجه با اجرای برنامه باید در هر ثانیه 18 کارکتر چاپ بشه و همین جوری بره پایین. من وقتی برنامه clock رو اجرا میکنم در جا خارج میشه و ...
    تو برنامه جای اون پروسیجری که هربار فراخونی باید بشه هر چیز دیگه ای هم که نوشتم اجرا نشد (مثلا همون چاپ یه کارکتر)
    در واقع به بن بست خوردم! می تونم ازتون خواهش کنم همین برنامه clock رو جوری تغییر بدین که هر بار یه کارکتر چاپ کنه. چون فکر می کنم اینجوری از شر جوانب کار آزاد بشم و بتونم بفهمم دقیقا چطوری داره کار می کنه.

  8. #8
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    احتمالا سعی کردید از ویندوز نتیجه شو ببینید. از منوی Start گزینه Run رو بزنید و بعد از Type کردن CMD دکمه ok رو بزنید. اونجا میتونید برنامه رو اجرا کنید و نتیجه شو ببینید.

  9. #9
    این طور نیست . من تو xp از cmd اجرا کردم چیزی ندیدم ولی تو 2000 که اجرا کردم نتیجه رو مشاهده کردم . برنامه جواب میده ولی کاری که من می خوام بکنم متفاوت با اینه .
    من می خوام در حال اجرای برنامه خودم یه پروسیجر مدام صدا زده بشه تا بتونه همزمان با اجرای مکرر اون کارهای دیگه برنامم هم انجام بشه.
    این طور که من متوجه شدم clock یه برنامه مقیم در حافظه ایجاد میکنه که در حین انجام دیگر کارها تو داس اجراش ادامه پیدا می کنه .
    بازم ازتون می خوام یه برنامه ای که این کار رو انجام بده برام بزارین . ممنون

  10. #10
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    یه توضیح کوچولو میدم اگه کمکتون نکرد حتما همون کارو میکنیم.
    1- می تونید تو برنامتون یه حلقه داشته باشید که همه کارارو براتون انجام بده تا اینکه از Timer کمک بگیرید.
    2- اگر تغییری تو Interrupt Handler دادید و کار نکرد به 2 تا نکته توجه داشته باشید. اول اینکه از سرویسهای DOS اونجا استفاده نکنید و دوم DS Register رو اگه استفاده می کنید حتما باید مقدار دهی کنید. اگر خواستید برنامتونو upload کنید اینجا تا بتونم کمکتون کنم. در ضمن اون قسمتی که برنامه رو تو Memory مقیم میکنه Ignore کنید انگار که وجود نداره و بعد نصب interrupt handler برنامه همینطور مشغوله و داره کارایی رو انجام میده. مهم کارگردان وقفه و قسمتی هست که اون رو نصب میکنه.

    اگر بازهم احساس نیاز کردید که برنامه عوض بشه بگید تا براتون عوضش کنم.

  11. #11
    با تشکر از توجهتون
    شما هر چی بیشتر برام توضیح می دید , من بیشتر متوجه میشم که ار اسمبلی چیزی نمی دونم !!!
    در واقع می خوام بگم خیلی از چیزهایی که در بالا گفتید سردرنیاوردم. ولی یه توضیح کوچولو در مورد برنامم بدم که جریان کار دستتون باشه (البته حتما بعد از اتمام برنامه اونو اینجا میزارم تا تازه کارهایی مثل من ازش استفاده کنن)
    نمای کلی بازیم که تو اون عکس بود . من یه پروسیر دارم به نام GoDown که هر بار که فراخونی بشه تمام اشیائی که در جاده هستند (البته غیر از ماشین) چند پیکسل به سمت پایین میان و نمایانگر حرکت ماشین به سمت بالا است. کار که باید بکنم اینه که این پرسیجر هر ثانیه 18 بار احرا بشه تا مثلا در هرثانیه همه چیز 18 پیکسل به سمت پایین بیاد .
    اگه اونو تو یه حلقه فراخونی کنم که یکسره اجرا میشه و اصلا چیزی رو نمی شه دید.
    در ضمن چون باید همزمان با حرکت ماشین (فراخوانی های مکرر GoDown) برنامه آماده دریافت کلیدی از ورودی جهت حرکت به سمت چپ و راست هم باشه نمی شه مثلا این فراخونی ها رو با یه delay انجام داد.
    فکر کنم منظورم رو رسونده باشم . خواهش می کنم شما یه برنامه بنویسید که توش یه پروسیجر که یه کار ساده میکنه همزمان با اجرای برنامه هر ثانیه 18 بار اجرا بشه که من بتونم ازش تو برنامم استفاده کنم.
    ممنون

  12. #12
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    خواهش می کنم شما یه برنامه بنویسید که توش یه پروسیجر که یه کار ساده میکنه همزمان با اجرای برنامه هر ثانیه 18 بار اجرا بشه که من بتونم ازش تو برنامم استفاده کنم.
    برنامه ساعت دقیقا داره همین کار رو انجام میده فقط شما فکر کنید اون قسمتیش که داره برنامه رو مقیم میکنه وجود نداره.

  13. #13
    جناب Delphi Coder از تمام راهنمایی هاتون ممنونم
    با توجه به کم آوردن وقت من دیگه برنامه رو ادامه ندادم و در واقع حرکت ماشین با فشردن کلید بالا در کیبورد صورت می گیره. (این برنامه رو بعنوان پروژه باید تحویل میدادم)
    همون طور که گفتم سورسش رو اینجا میزارم تا تازه کارهایی مثل من بتونن ازش استفاده کنن.
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar nfs.rar‏ (4.2 کیلوبایت, 29 دیدار)

  14. #14
    کاربر دائمی آواتار mohammadreza0123
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    مازندران - قائمشهر
    پست
    132

    نقل قول: 2-3 تا سوال در مورد یه برنامه گرافیکی

    سلام

    خواهشا یه نفر کمکم کنه

    کسی هست رسم خط با استفاده از معادله خط رو بلد باشه

    تورو خدا کمک کنید

    گیر افتادم

    حتما با استفاده از معادله خط باشه

    و هر بار که اجرا میشه شیبش هم تغییر کنه

    کمک کنید

    یعنی هیچکی نمی تونه کمکم کنه؟
    ؟؟؟

    :(

  15. #15
    کاربر دائمی آواتار mohammadreza0123
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    مازندران - قائمشهر
    پست
    132

    نقل قول: 2-3 تا سوال در مورد یه برنامه گرافیکی

    کسی هست بتونه کد رسم خط با استفاده از معادله خط را به من بده

  16. #16

    نقل قول: 2-3 تا سوال در مورد یه برنامه گرافیکی

    با سلام؛
    دوست عزيز شما تاپيك سال 86 رو مجددا فعال كرديد و ميتونستيد به جاي اين، سوالتون رو در يك تاپيك جديد مطرح كنيد.!!!

    در اين مورد قبلا پست داديد و جواب هم داده شده...

    رجوع كنيد به: https://barnamenevis.org/showthread.p...A8%D9%84%D9%8A

    موفق باشيد.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •