मैं कुछ रेखीय बीजगणित संरचनाओं का उपयोग करूँगा क्योंकि यह इस तरह से संचालन का वर्णन करना आसान है। मामले में आप नहीं जानते कि इन वेक्टर ऑपरेशनों को कैसे लागू किया जाए, मैं अंत में एक त्वरित स्पष्टीकरण दूंगा।
तो मान लें कि आप इन मूल्यों के साथ शुरू करते हैं: start
और end
आंदोलन के अंतिम बिंदुओं को चिह्नित करते हैं, speed
यह है कि कितने पिक्सल इसे दूसरे स्थान पर ले जाना चाहिए, और elapsed
वह दर है जिस पर आप अपनी वस्तु की स्थिति को अपडेट करेंगे (कुछ इंजन पहले से ही आपके लिए यह मान प्रदान करते हैं ):
Vector2 start = new Vector2(x1, y2);
Vector2 end = new Vector2(x2, y2);
float speed = 100;
float elapsed = 0.01f;
पहली चीज जिसे आप गणना करना चाहते हैं, वह है दोनों बिंदुओं के बीच की दूरी, और एक सामान्यीकृत वेक्टर जिसमें शुरुआत से अंत तक की दिशा होती है। इसके अलावा, आपको वस्तु स्थिति को start
बिंदु पर "स्नैप" करना चाहिए । यह कदम शुरुआत में केवल एक बार किया जाता है:
float distance = Vector2.Distance(start, end);
Vector2 direction = Vector2.Normalize(end - start);
object.Position = start;
moving = true;
फिर अपने अद्यतन पद्धति पर, आप के गुणन जोड़कर वस्तु ले जाने के direction
, speed
और elapsed
अपनी स्थिति के लिए। उसके बाद, यह जांचने के लिए कि क्या आंदोलन समाप्त हो गया है, आप देखें कि प्रारंभ बिंदु और ऑब्जेक्ट की वर्तमान स्थिति के बीच की दूरी आपके द्वारा गणना की गई प्रारंभिक दूरी से अधिक है या नहीं। यदि यह सच है, तो हम ऑब्जेक्ट की स्थिति को अंतिम बिंदु पर स्नैप करते हैं, और ऑब्जेक्ट को स्थानांतरित करना बंद करते हैं:
if(moving == true)
{
object.Position += direction * speed * elapsed;
if(Vector2.Distance(start, object.Position) >= distance)
{
object.Position = end;
moving = false;
}
}
त्वरित वेक्टर ऑपरेशन संदर्भ
प्रतिनिधित्व
Vector2 A = float aX, aY;
योग / घटाना
A+B = a.x + b.x; a.y + b.y;
A-B = a.x - b.x; a.y - b.y;
स्केलर द्वारा गुणा (फ्लोट)
A*float = a.x*float; a.y*float;
लंबाई / दूरी
length(A) = sqrt(a.x*a.x + a.y*a.y)
distance(A,B) = length(B-A)
सामान्य
normalize(A) = a.X/length(A); a.Y/length(A);
यदि आपके पास आपके पास कोई Vector
क्लास उपलब्ध नहीं है, तो उपरोक्त कोड को नियमित संचालन में बदलने के लिए पर्याप्त होना चाहिए ।
रूपांतरण का उदाहरण
// Your Variables
float startX, startY, endX, endY;
float speed = 100;
float elapsed = 0.01f;
// On starting movement
float distance = Math.sqrt(Math.pow(endX-startX,2)+Math.pow(endY-startY,2));
float directionX = (endX-startX) / distance;
float directionY = (endY-startY) / distance;
object.X = startX;
object.Y = startY;
moving = true;
// On update
if(moving == true)
{
object.X += directionX * speed * elapsed;
object.Y += directionY * speed * elapsed;
if(Math.sqrt(Math.pow(object.X-startX,2)+Math.pow(object.Y-startY,2)) >= distance)
{
object.X = endX;
object.Y = endY;
moving = false;
}
}