এক্সএনএ-তে মাউস ইনপুট কীভাবে পরিচালনা করবেন?


13

আমি এক্সএনএ-তে একটি কার্ড গেম বিকাশ করছি।

OnClickএক্সএনএ-তে কোনও কি জিনিস রয়েছে?

প্লেয়ার যখন তাদের ক্লিক করে তখন আমি কার্ডগুলি সরানোর চেষ্টা করছি। এই প্রকল্পে, একটি স্প্রাইট শ্রেণি রয়েছে যা কার্ড আঁকে, তবে আমি কিছুটা আটকেছি কারণ কীভাবে OnClickইভেন্টগুলি বা এর মতো কিছু ব্যবহার করতে হয় তা আমি জানি না ।

উত্তর:


12

সাধারণভাবে এক্সএনএর সাথে কাজ করার সময় আপনাকে ইভেন্ট চালিত কোড দৃষ্টান্ত থেকে একটি লুপ চালিত কোড প্যারাডিজমে যেতে হবে। আপনার আপডেট কোড 60 বার / সেকেন্ড লুপ করে। সুতরাং প্রতিবার, মাউসের অবস্থার দিকে তাকান এবং যদি কোনও বোতাম নীচে থাকে এবং পয়েন্টারটি আপনার রেক্টরের মধ্যে থাকে, তবে কোডগুলিতে শাখা করুন যা আপনি একটি অনিক্লিক ইভেন্টে রাখবেন।


2
দেখে মনে হচ্ছে এটি শব্দার্থগতভাবে সঠিক হতে পারে তবে আমার মতে এটিও ভুল। কোনও থ্রেড দেখার জন্য নেমে গেলে এবং প্রতিটি লুপের সময়কার বর্তমান অবস্থাটি নিয়ে কোনও ইভেন্ট নেই। এজন্য আমরা আমাদের নিজস্ব ইভেন্টগুলি তৈরি করি এবং তাদের সম্পর্কিত হ্যান্ডলারগুলি লিখি। আমি বলেছি যে মাউস ডাউনগুলির প্রতিটি ক্ষেত্রে শাখায় ফ্লো কন্ট্রোল ব্যবহার করে একটি বড় প্রকল্পে পাগল হয়ে যাবে। পরিবর্তে, একটি ইভেন্ট নিবন্ধ করুন এবং যেখানে প্রয়োজন সেখানে হ্যান্ডলার লিখুন। এই কারণে ইভেন্টগুলি প্রথম স্থানে চিন্তা করা হয়েছিল।
ব্র্যান্ডন

5
ব্র্যান্ডন: আপনি "মাউস ডাউন করার প্রতিটি ক্ষেত্রে শাখায় প্রবাহ নিয়ন্ত্রণ ব্যবহার করবেন না"। আপনি প্রতিটি ফ্রেমের শুরুতে বর্তমান এবং পূর্বের মাউসের অবস্থা একবার রেকর্ড করেন এবং তারপরে আপনার কোডটি যে মাউসডাউন প্রেসের প্রতিক্রিয়া দেখায় সেই জায়গাগুলিতে আপনি কেবল করেন if(MouseLeftPress()){ DoSomething(); }যেখানে MouseLeftPress()বর্তমান এবং পূর্বের বাম বোতামের মাউসের অবস্থার তুলনা করার জন্য আপনি যে পদ্ধতিটি লিখেছেন তা কোথায় । বেশিরভাগ সময় ইভেন্টগুলি প্রয়োগ করার চেয়ে আমি এটিকে সহজ বলে মনে করি।
ওলহোভস্কি

4
সাধারণ পোলিং আপনার বেসিক আরকেড নিয়ন্ত্রণগুলি ছাড়িয়ে সত্যই কুরুচিপূর্ণ হয়। আমার কাছে একটি ইনপুট ম্যানেজার শ্রেণি রয়েছে যা গেমপ্যাডের স্থিতিকে ফ্ল্যাগএট্রিবিউটস হিসাবে ক্যাপচার করে এবং আপনাকে বোতামের বিভিন্ন সংমিশ্রণে প্রতিনিধিদের মানচিত্র করতে দেয়। পরবর্তী পদক্ষেপটি সময় বাস্তবায়ন করা। এই সমস্ত বিতর্কটি কেবল স্টিভ এইচ এর বক্তব্যকে আরও শক্তিশালী করে যদিও আপনি একটি পোলিং ব্যবস্থা দিচ্ছেন, এবং আপনি যে উদাহরণটি পছন্দ করেন তা সমর্থন করার জন্য আপনি এটি তৈরি করতে মুক্ত।
মাইক্রেল.বার্টনেট


6

এক্সএনএ কেবলমাত্র আপনার নিজের ইনপুট ক্লাস তৈরির জন্য যথেষ্ট পরিমাণে দেয় - এবং আপনার দেওয়া ইউটিলিটি বিবেচনা করে আপনার এটি করা উচিত।

আমি এই ব্লগ পোস্টে ( উত্স কোড ) বর্ণিত মাউস ইনপুট শ্রেণির সুপারিশ করব । এটি চাপ দেওয়া, ধরে রাখা বা প্রকাশ করা হচ্ছে এমন একটি বোতাম সনাক্ত করে এবং ভোটদান বা ইভেন্টের মাধ্যমে আপনাকে সেই তথ্য পেতে দেয়।

সম্পর্কিত নোটে, একই ব্লগ পোস্ট কীবোর্ড এবং গেমপ্যাড ইনপুট ডিভাইস ক্লাসগুলিও সরবরাহ করে।


3

এক্সএনএ-তে মাউস ক্লিকের পরীক্ষার জন্য আসল কোডটি এরকম কিছু;

    MouseState previousMouseState;
    protected override void Initialize()
    {
        // TODO: Add your initialization logic here
        //store the current state of the mouse
        previousMouseState = Mouse.GetState();
    }


    protected override void Update(GameTime gameTime)
    {
        // .. other update code


        //is there a mouse click?
        //A mouse click occurs if the goes from a released state
        //in the previous frame  to a pressed state 
        //in the current frame
        if (previousMouseState.LeftButton == ButtonState.Released 
            && Mouse.GetState().LeftButton == ButtonState.Pressed)
        {
            //do your mouse click response...

        }

        //save the current mouse state for the next frame
        // the current 
        previousMouseState = Mouse.GetState();

        base.Update(gameTime);
    }

2

আপনার গেমটি যদি 3D হয় তবে আপনি বাছাই বাস্তবায়ন করতে পারবেন, যা এখানে বর্ণিত হয়েছে: http://create.msdn.com/en-US/education/catalog/sample/picking_triangle । মূলত এটি ক্যামেরা থেকে একটি রশ্মি তৈরি করে যেখানে মাউস ক্লিক করে (সেখানে একটি সামান্য ম্যাট্রিক্স অপ্রকল্পিত), তারপরে আপনি পরীক্ষা করে দেখুন যে আপনার কোনও বস্তু রে দ্বারা ছেদ করা হয়েছে কিনা।

যদি আপনার গেমটি 2 ডি হয়, আপনার গেমের স্থানাঙ্কগুলিতে মোটামুটি সহজে উইন্ডো স্থানাঙ্কগুলি অনুবাদ করতে সক্ষম হওয়া উচিত। তারপরে নির্বাচিত স্থানাঙ্কগুলি আপনার কোনও বস্তুর সীমানার মধ্যে রয়েছে কিনা তা পরীক্ষা করে দেখুন।


1

মাউসটি ক্লিক করা আছে কিনা তা দেখার সহজ উপায় এটি

//Create this variable
MouseState mouseState;

আপডেট পদ্ধতিতে এখন এটি যুক্ত করুন

mouseState = Mouse.GetState();

if (mouse.RightButton == ButtonState.Pressed)
{
     //Do Stuff
}

আশা করি এটি সাহায্য করেছিল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.