سؤال

أولا وقبل كل شيء, أنا متأكدة من التقاط الشبكة من السهل إلى حد ما, لكن واجهتني بعض الغريب مشكلة في هذه الحالة و الرياضيات ضعيفة جدا للعمل على وجه التحديد ما هو الخطأ.

هنا الوضع

لدي مفهوما مجردا من الشبكة ، مع ذ الخطوات بالضبط Y_STEP وبصرف النظر (x الخطوات هي تعمل بشكل جيد حتى تجاهلها الآن)

الشبكة هو مجرد تنسيق الفضاء ، للحصول على الأشياء أن يصطف لدي السحر إزاحة هناك ، دعنا نسميها Y_OFFSET

لالتقاط إلى الشبكة لدي البرمجية التالية (بايثون)

def snapToGrid(originalPos, offset, step):
    index = int((originalPos - offset) / step) #truncates the remainder away
    return index * gap + offset

لذا تمرير المؤشر الموقف ، Y_OFFSET و Y_STEP إلى أن وظيفة الأمر يعود لي أقرب طوابق y الموقف على الشبكة

التي يبدو أن تعمل بشكل جيد في السيناريو الأصلي, ولكن عندما كنت تأخذ في الاعتبار حقيقة أن الرأي هو تمرير الحصول على أشياء غريبة قليلا.

التمرير فيما الأساسية ما أستطيع الحصول عليه, لقد حصلت على العرض الذي يستمر العد من بعد تمريره على طول المحور Y و إزاحة كل شيء أن يذهب من خلال ذلك.

هنا مقتطف من المؤشر mouseMotion كود:

def mouseMotion(self, event):
    pixelPos = event.pos[Y]
    odePos = Scroll.pixelPosToOdePos(pixelPos)
    self.tool.positionChanged(odePos)

لذلك هناك اثنين من الأشياء أن ننظر إلى هناك أولا انتقل وحدة الترجمة من بكسل موقف مجردة تنسيق الفضاء ، ثم أداة positionChanged الدالة التي تأخذ مجردة تنسيق الفضاء القيمة ويستقر إلى أقرب Y الخطوة.

وهنا ذات الصلة انتقل رمز

def pixelPosToOdePos(pixelPos):
    offsetPixelPos = pixelPos - self.viewPortOffset
    return pixelsToOde(offsetPixelPos)

def pixelsToOde(pixels):
    return float(pixels) / float(pixels_in_an_ode_unit)

والأدوات تحديث رمز

def positionChanged(self, newPos):
    self.snappedPos = snapToGrid(originalPos, Y_OFFSET, Y_STEP)

آخر ذات الصلة جزء هو عندما أداة يذهب إلى تقديم نفسها.فإنه يذهب من خلال انتقل الكائن الذي يحول أداة قطعت تنسيق الفضاء الموقف إلى الشاشة بكسل الموقف هنا كود:

#in Tool
def render(self, screen):
    Scroll.render(screen, self.image, self.snappedPos)

#in Scroll
def render(self, screen, image, odePos):
    pixelPos = self.odePosToPixelPos(odePos)
    screen.blit(image, pixelPos) # screen is a surface from pygame for the curious

def odePosToPixelPos(self.odePos):
    offsetPos = odePos + self.viewPortOffset
    return odeToPixels(offsetPos)

def odeToPixels(odeUnits):
    return int(odeUnits * pixels_in_an_ode_unit)

يا للعجب هذا كان شرح طويل.آمل كنت لا تزال معي...

المشكلة أنا الآن الحصول على هذا عندما انتقل حتى رسم صورة يفقد التوافق مع المؤشر.
يبدأ الانجذاب إلى Y خطوة بالضبط الخطوة 1 أدناه المؤشر.بالإضافة إلى ذلك يبدو أن المرحلة في allignment.
في بعض مخطوطات فمن بحلول 1 وغيرها من مخطوطات ذلك على الفور.
انها أبدا من قبل أكثر من 1 وانها دائما العض صالح الشبكة الموقع.

أفضل أعتقد أنني يمكن أن تأتي مع أن في مكان ما أنا اقتطاع بعض البيانات في المكان الخطأ ، ولكن أي فكرة من أين أو كيف ينتهي مع هذا السلوك.

أي شخص على دراية تنسيق المساحات التمرير و العض?

هل كانت مفيدة؟

المحلول

حسنا, أنا الإجابة على سؤالي هنا ، alexk المذكورة ، وذلك باستخدام الباحث إلى اقتطاع كان خطأي.

سلوك أنا بعد أفضل غرار الرياضيات.الكلمة().

أعتذر السؤال الأصلي لا يحتوي على ما يكفي من المعلومات يمكن معرفة ما هي المشكلة.لم يكن لدي بت إضافية من المعلومات في تلك المرحلة.

فيما يتعلق مطبعي ملاحظة أعتقد أنني قد يكون استخدام السياق بطريقة مربكة...من وجهة نظر positionChanged() وظيفة المعلمة وظيفة جديدة قادمة.
من وجهة نظر snapToGrid() وظيفة المعلمة هو الموقف الأصلي الذي يجري تغيير قطعت الموقف.اللغة مثل هذا لأنه جزء من ذلك في التعامل مع الحدث رمز و الجزء الآخر في الخدمات العامة البرمجية.يجب أن يتغير ذلك على سبيل المثال

نصائح أخرى

هل لديك خطأ مطبعي في positionChanged() ?

def positionChanged(self, newPos):
    self.snappedPos = snapToGrid(newPos, Y_OFFSET, Y_STEP)

أعتقد كنت خارج بمقدار بكسل واحد بسبب المشاكل دقة خلال تعويم شعبة.محاولة تغيير snapToGrid() إلى هذا:

def snapToGrid(originalPos, offset, step):
    EPS = 1e-6
    index = int((originalPos - offset) / step  + EPS) #truncates the remainder away
    return index * gap + offset

شكرا على الجواب ، قد يكون هناك خطأ مطبعي, ولكن لا أستطيع أن أرى ذلك...

للأسف تغيير snapToGrid لم تحدث فرقا ، لذلك أنا لا أعتقد أن هذه هي القضية.

أنه ليس بمقدار بكسل واحد ، بل إنه قبل Y_STEP.لعب مع حولها بعض أكثر لقد وجدت أنني لا يمكن أن تحصل عليه بالضبط في أي نقطة على الشاشة هو تمريره أيضا أن يحدث نحو الجزء العلوي من الشاشة ، وأظن قصيدة موقف الصفر ، لذلك أنا التخمين مشكلتي هي في جميع أنحاء صغيرة أو القيم السلبية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top