45 ° একটি টাইল ভিত্তিক 2D প্লাটফর্মার °ালু


12

আমার টাইল ভিত্তিক প্ল্যাটফর্মারটিতে আমি সাধারণ 45 ° opালু রাখতে চাই, তবে আমি ঠিক অ্যালগরিদমকে নামিয়ে আনতে পারি না। দয়া করে কোড এবং ভিডিওটি একবার দেখুন, সম্ভবত আমি কী স্পষ্ট অনুভব করছি?

//collisionRectangle is the collision rectangle of the player with 
//origin at the top left and width and height
//wantedPosition is the new position the player will be set to.
//this is determined elsewhere by checking the bottom center point of the players rect
if(_leftSlope || _rightSlope)
{        
    //Test bottom center point
    var calculationPoint = new Vector2(collisionRectangle.Center.X, collisionRectangle.Bottom);
    //Get the collision rectangle of the tile, origin is top-left
    Rectangle cellRect =
        _tileMap.CellWorldRectangle(
            _tileMap.GetCellByPixel(calculationPoint));
    //Calculate the new Y coordinate depending on if its a left or right slope
    //CellSize = 8
    float newY = _leftSlope
                            ? (calculationPoint.X % CellSize) + cellRect.Y
                            : (-1 * (calculationPoint.X % CellSize) - CellSize) + cellRect.Y;
    //reset variables so we dont jump in here next frame
    _leftSlope = false;
    _rightSlope = false;
    //now change the players Y according to the difference of our calculation
    wantedPosition.Y += newY - calculationPoint.Y;
}

দেখতে কেমন লাগে তার ভিডিও: http://youtu.be/EKOWgD2muoc


1
ভেক্টর কি দুর্দান্ত নয়? : ডি
গুস্তাভো ম্যাকিয়েল

উত্তর:


10

আপনার প্রশ্নটি যা আমি বুঝতে পেরেছি সেগুলি থেকে আপনি প্লেয়ারের অবস্থানের দিক দিয়ে সঠিক Yঅবস্থান গণনা করতে চান X। এটি বরং তুচ্ছ। এই চিত্রটি দেখুন:

ঢাল

ধরে নিচ্ছি আপনার slাল-টাইলটি একটি নির্দিষ্ট অবস্থানে রয়েছে x,y(চিত্রটি যেমন উত্স নীচে বামে রয়েছে)। আপনার প্লেয়ারের অবস্থান x1এবং প্রস্থ এবং slালু টাইলের উচ্চতা ( u, v) রয়েছে। x, yএবং x1বিশ্বের সমন্বয়কারী হয়।

এই পরামিতিগুলি দেওয়া, আপনার প্লেয়ারদের ওয়াই-পজিশন ( y1) হবে:

y1 = y + (x1 - x) * (v / u)

যদি আপনি কেবল 45 ডিগ্রি কোণ নিয়ে কাজ করে থাকেন তবে এটি আরও সহজ হয়:

y1 = y + (x1 - x)

Opeালটি যদি অন্যভাবে হয় তবে এটি হ'ল:

y1 = y + (v - (x1 - x))

@ স্কিমফ্লাক্স ফিক্স প্লাস করার পরে আপনার নতুন ফর্মুলার প্লাস কিছু বোকামি জিনিস যা আমি এড়িয়ে গিয়েছি তা কার্যকর হয়েছে। ধন্যবাদ।
xNidhogg

আপনি সরল গণনার জন্য y = mx + b ব্যবহার করতে পারবেন না?
ashes999

@ ashes999 আমার মনে হয় না যে আমি যা লিখেছি তা তার চেয়ে বেশি সহজ হয়ে যায়। কি mএবং bআপনার গণনায় আছে?
বাম্মজ্যাক

@ অ্যামবজ্যাক এম আপনার opeাল (নিম্নরূপে 45 ডিগ্রি slালের জন্য 1, উপরের দিকে -1) এবং বি এক্স-অক্ষের উপর বিরতি হবে। গ্রেড 9 বীজগণিত। শুধু Sayin'.
ashes999

@ ashes999 হ্যাঁ এটি অনেক দিন হয়ে গেছে। একটি উত্তর হিসাবে এই সমীকরণ পোস্ট নির্দ্বিধায়।
বাম্মজ্যাক

8

যদিও এর ইতিমধ্যে উত্তর দেওয়া হয়েছে, আমাকে অন্য সমীকরণ প্রস্তাব করার অনুমতি দিন: y = mx + bযেখানে y স্থানাঙ্ক গণনা করা হয়, এম হ'ল (-1 ডিগ্রি ডাউন ডাউন 1 ডিগ্রি 45 ডিগ্রি পর্যন্ত 1), এবং খ হ'ল ই-ইন্টারসেপ্ট - - y- স্থানাঙ্ক যেখানে x = 0।

এটি আপনাকে আরও কিছুটা নমনীয়তা দেয়; 45 ডিগ্রি ব্যতীত অন্য কোনও slাল গণনা করতে আপনি এম পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, পাই / 3 এর একটি এম আপনাকে 30 ডিগ্রির ঝাল দেয়।


4

আপনি এই সাইটে অনেক মূল্য পেতে পারেন: http://info.sonicretro.org/ সোনিক_ফিজিক্স_গাইড

সলিড টাইলস: opালু এবং বক্ররেখা বিভাগটি যা আপনি সন্ধান করছেন তা বিশেষত: এটি প্রাথমিকভাবে আপনাকে দেখায় যে এটি কীভাবে বিশ্বাস করা হয় এটি প্রাথমিক সোনিক গেমগুলিতে সম্পন্ন হয়েছিল।


আকর্ষণীয় পড়া, কিন্তু খুব জটিল। এই ধরণের opeালটি কেবলমাত্র আমিই চাই, সুতরাং সমাধানটি সহজ করা উচিত। একটি উচ্চতার মানচিত্র / সেন্সর / স্ক্যানার সিস্টেম এটির জন্য ওভারকিল হবে। লিঙ্কটি খনন করার জন্য ধন্যবাদ, যদিও।
xNidhogg

2

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

metanetsoftware টিউটোরিয়াল

রিয়েল-টাইম-সংঘর্ষজনিতএকত্রিকরণ সনাক্তকরণ


খুব বেশি, ইমো। এটি অত্যন্ত সরলকরণের কেস এবং স্যাটের অন্যান্য ব্যবহারের প্রয়োজন হবে না। লিঙ্কগুলি টানতে সময় দেওয়ার জন্য ধন্যবাদ, যদিও।
xNidhogg

2

আমার মনে হয় আপনার অন্যথায় অন্য কোথাও একটি অফ-ওয়াইড ত্রুটি রয়েছে, বা আপনি সঠিক সময়ে _ বামদিক / _সাইটস্লোপ পতাকাগুলি সেট করছেন না। এই কোডটি মোটেও X মুভমেন্টটিকে স্পর্শ করে না তবে ভিডিওতে এটি আপনার সমস্যা বলে মনে হচ্ছে।

এই পতাকাগুলি আদৌ ট্রিগার করা হয়েছে কিনা তা আপনার পরীক্ষা করা উচিত। তারপরে আপনার অনুভূমিক সংঘর্ষ সনাক্তকরণটি পরীক্ষা করুন: আপনি চান না যে এটি কোনও itালুতে ট্রিগার হয় to


ওহ godশ্বর ঠিক বলেছেন। আমি যখন আসলে এটি হয় তখন অনুভূমিক বা উল্লম্ব সংঘর্ষ সনাক্তকরণ চাই না। আমি পুরোপুরি এটি অক্ষম করতে ভুলে গেছি। এখন একরকম ভাল দেখাচ্ছে, তবে এখনও করা হয়নি। ধন্যবাদ।
xNidhogg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.