আমি একটি পরীক্ষার গেমটি তৈরি করছি যেখানে আমি চাই স্তরটি ক্রমাগত স্ক্রোলিং হয়। এই প্রভাবটি তৈরি করতে আমি একটি ক্যামেরা ক্লাস প্রতিষ্ঠা করেছি যা কেবল একটি ভেক্টর 2 অবস্থান এবং একটি এনম দিকনির্দেশনা সঞ্চয় করে। এটিতে 'সরানোর' জন্য একটি সরকারী পদ্ধতি রয়েছে যা কেবলমাত্র একটি নির্দিষ্ট হারে অবস্থান পরিবর্তন করে। আমি অঙ্কন করার সময় আমার টাইলগুলির অ্যারেটি লুপ করে যখন এই অবস্থানটি ব্যবহার করি। এই সব কাজ করে।
যাইহোক, আমাকে বলা হয়েছে যে আমার ক্যামেরাটি সরানোর জন্য ট্রান্সফর্ম ম্যাট্রিক্স ব্যবহার করা উচিত এবং স্প্রিটব্যাচ শুরু করার সাথে সাথে আমার এটি সরবরাহ করা উচিত। আমি একটু বিভ্রান্ত আ।) এটি কীভাবে কাজ করে? স্প্রেটব্যাচ শুরু হওয়ার সাথে সাথে যদি আমি কেবল এটি দিচ্ছি তবে এটি কীভাবে অবস্থান পরিবর্তন করতে জানে? খ।) কেন আমি এখনও টাইলসের মধ্য দিয়ে লুপ করার জন্য ক্যামেরার অবস্থানের প্রয়োজন হিসাবে কেন এটি এখনও নিশ্চিত?
এই মুহুর্তে আমি এটি কাজ করতে পারি না, তবে এটি কোনও আশ্চর্যের বিষয় নয় কারণ আমি কীভাবে এটি বোঝাতে চাইছি এটি সম্পূর্ণরূপে বুঝতে পারি না। বর্তমানে আমার প্রচেষ্টায় (অনুসরণ করার কোড) টাইলগুলি পরিবর্তন করা হচ্ছে যার অর্থ ক্যামেরাগুলির অবস্থান পরিবর্তন হচ্ছে তবে ভিউপোর্টের অবস্থান অপরিবর্তিত রয়েছে (অর্থাত ক্যামেরা উত্সে)। কীভাবে এটি ব্যবহার করা উচিত বলে আমি কিছু পরামর্শ / দিকনির্দেশনাটির সত্যই প্রশংসা করব?
ক্যামেরা:
class Camera {
// The position of the camera.
public Vector2 Position {
get { return mCameraPosition; }
set { mCameraPosition = value; }
}
Vector2 mCameraPosition;
public Vector2 Origin { get; set; }
public float Zoom { get; set; }
public float Rotation { get; set; }
public ScrollDirection Direction { get; set; }
private Vector2 mScrollSpeed = new Vector2(20, 18);
public Camera() {
Position = Vector2.Zero;
Origin = Vector2.Zero;
Zoom = 1;
Rotation = 0;
}
public Matrix GetTransform() {
return Matrix.CreateTranslation(new Vector3(mCameraPosition, 0.0f)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(Zoom, Zoom, 1.0f) *
Matrix.CreateTranslation(new Vector3(Origin, 0.0f));
}
public void MoveCamera(Level level) {
if (Direction == ScrollDirection.Up)
{
mCameraPosition.Y = MathHelper.Clamp(mCameraPosition.Y - mScrollSpeed.Y, 0, (level.Height * Tile.Height - level.mViewport.Height));
}
}
স্তর:
public void Update(GameTime gameTime, TouchCollection touchState) {
Camera.MoveCamera(this);
}
public void Draw(SpriteBatch spriteBatch) {
//spriteBatch.Begin();
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullCounterClockwise, null, mCamera.GetTransform());
DrawTiles(spriteBatch);
spriteBatch.End();
}
গেম - মাত্র স্তরের মধ্যে ড্রকে কল করে:
protected override void Draw(GameTime gameTime) {
mGraphics.GraphicsDevice.Clear(Color.Black);
//mSpriteBatch.Begin();
// Draw the level.
mLevel.Draw(mSpriteBatch);
//mSpriteBatch.End();
base.Draw(gameTime);
}
================================================== =============================== সম্পাদনা:
প্রথমত, এখন পর্যন্ত আপনার সহায়তার জন্য ক্র্যাফটওয়ার্কসকে ধন্যবাদ জানাই।
আমি পরামর্শ নিয়ে চারদিকে খেললাম। যখন আমি সমস্ত টাইল আঁকতাম, তখন 30 থেকে 15 টি ফ্রেঞ্চ ট্যাঙ্ক হয় - সম্ভবত স্তরগুলি বেশ বড়।
সুতরাং আমি যা করেছি তা হ'ল ম্যাট্রিক্স প্রয়োগ করা এবং আপডেটে সরানো (প্রস্তাবিত হিসাবে) তবে ড্রতে আমি টাইলগুলির মাধ্যমে লুপিংয়ের জন্য ক্যামেরার অবস্থানটি ব্যবহার করি (অর্থাত্ বামদিকে কাউন্টারের শুরু এবং ডান টাইলের শেষে)। এটি সব ভালভাবে কাজ করে এবং আমি এতে খুশি :-)
আমার নতুন ইস্যুটি প্লেয়ারের মধ্যে রয়েছে। স্পষ্টতই আমি এখন স্তরটির চেয়ে ক্যামেরাটি সরিয়ে নিয়ে যাচ্ছি, প্লেয়ার স্থিতিশীল থাকার সাথে সাথে ক্যামেরটি পিছনে চলে যায়। আমি এই সমস্যার দুটি সমাধান নিয়ে ভাবলাম, প্রথমটি হল প্লেয়ারটিকে আঁকানোর সময় কেবল ক্যামেরার অবস্থানটি বিবেচনা করা। অর্থাৎ ড্র ফানসিউনে কেবল প্লেয়ারের অবস্থানের জন্য ক্যামেরার অবস্থান যুক্ত করুন। দ্বিতীয়টি হল প্লেয়ারটির জন্য একটি নতুন স্প্রাইট ব্যাচ শুরু করা যার কোনও রূপান্তর নেই। অর্থাত টাইলস আঁকার পরে স্প্রিটব্যাচ শেষ করুন প্লেয়ারের অঙ্কন করার সময় একটি নতুন শুরু করুন। আমি জানি যে উভয়ই কাজ করবে, তবে আমি টেইলগুলি তৈরি করতে পারি না যার মধ্যে পারফরম্যান্স / ভাল কোডিংয়ের ক্ষেত্রে আরও ভাল হতে পারে? আমি নিশ্চিত নই যে ব্যাচটি দু'বার শুরু করা থেকে পারফরম্যান্সের কী কী প্রভাব পড়ে?