Get it on google play

تغيير مكان صورة في الواجهة لتصبح فوق صورة أخرى



  • مرحبا!!
    عندي سؤال استوقفني في الأندرويد...أحاول أن أقوم بعمل لعبة بسيطة الى حد ما من نوع الأفكار اللوحية يعني مثل الشطرنج لكن أبسط منها بكثير، تحتوي على القاعدة المكونة من مربعات حيث قمت بوضع كل مربع لوحدة مع
    طائه معين و هناك سبع أحجار لكل لاعب يقوم بتحريكها بشكل معين على اللوح كما هو واضح في الصورة
    0_1529678074403_aJWTs.png
    قمت بوضع المربعات داخل
    GridLayout
    أما الأحجار فداخل
    LinearLayout
    و الجميع داخل
    RelativeLayout
    وأعلم انه قد أحتاج الى تغيير هذا الترتيب، لكن سؤالي هو كيف أغير مكان الحجر لأجعلها تبدو أعلى احدى المربعات؟
    هل هناك طريقة لوضعها باستخدام ال
    Id
    الخاص بكل مربع أم علي أن اعلم موقع المربعات بالتحديد أي ال
    (x,y)
    كما انه خطرت ببالي ان أقوم بوضع الحجر كصورة على المربع المطلوب وذلك باللعب في ال
    visibilty
    لكن في هذه الحالة عملية تعقب مكان الحجر عند الضغط عليه ستكون أكثر تعقيدا، أنا لا أريد حلاً مباشر فقط فكرة تضعني على الطريق الصحيح
    أنا ضائعه حالياً
    شكرا و أعتذر على الاطالة



  • @hassan-youssef يا ريت تفيدنا استاذ


  • administrators

    حاضر ارد النهاردة او غدا باذن الله لانى تعبان شوية



  • @hassan-youssef اكيد استاذ باي وقت مناسب بالنسبة لك
    شكرا مقدما


  • administrators

    كل عنصر فى اللوحة او
    view

    سواء كان layout
    or view like imageview

    له خاصية اسمها
    Tag

    يمكنك استخدامها
    بحيث انه عندما يقوم المستخدم
    بسحب الحجر على اللوحة فى مكان معين على
    view
    معين
    يتم تغيير خاصية الـ
    tag
    الخاصة بهذا الفيو
    الى الـ id
    الخاص بالحجر الذى تم اختيارة

    ويمكنك بعد ذلك الوصول الى الحجر عن طريق البحث عن الـ
    id
    الخاص به
    فى كل الـ
    views

    فى قيمة الخاصية
    tag



  • @hassan-youssef هممم شكرا جزيلا يبدو ان هذا ما أحتاجه ساقوم بالبحث أكثر في الموضوع و أحاول حل المشكلة
    شكرا مرة أخرى



  • @hassan-youssef لكن من أجل لتوضيح ما وصلني هو كيفية ربط الحجر مع مربع معين على لوح اللعب وهذا رائع لكنني ما زلت غير متأكدة من كيفية جعله يصبح فعلياً فوق المربع يعني نقل مكانه ليصبح فوق المربع، ما هي أفضل طريقة لنقل view
    لتصبح فوق
    view
    أخرى لتوضيح ذلك أكثر سأقوم بتعدي الصورة لما أريده
    0_1529818948620_aJWTs1.jpg

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


  • administrators

    هذا الحجر الذى قمت بتحريكه سيتم وضعه فوق مربع من ضمن خمس مربعات اذا كان صحيح فكل مربع منهم عبارة عن صورة يمكنك تغير صورة المربع الى صورة الحجر وحفظ الـ
    id

    الخاص بالحجر داخل الخاصية
    tag

    الخاصة بـ بالمربع التى تم نقله اليه وهكذا



  • @hassan-youssef نعم خطرت ببالي هذه الفكرة لكن فكرة اللعبة ان اللاعب سينقر على أحد الأحجار من أجل تحديد أي من الأحجار سيحرك وبذلك سيكون هناك
    ClickListener
    خاص بكل حجر، اذا استعنت بهذه الطريقة سيكون ال
    ClickListener
    على المربع بدلا من الحجر أو على كليهما و أعتقد انه في هذه الحالة سنعقد المسألة
    أسفة على الاطالة لكنني أريد أن أصل الى حل قد يستفيد منه شخص آخر في المستقبل لذلك أتتني فكرة اذا نجحت سأقوم بنشر الحل هنا ان شاء الله.
    أنا وضعت مسار كل فريق في مصفوفة لأنه اللعبه لها مسار محدد وهذا يسهل من العملية، و أقوم بنقل الأحجار عن طريق تغيير قيم ال
    x وال
    y
    لتنتقل الى مكان المربع وبما انهم داخل
    Relative Layout
    سيظهر وكأنه الحجر فوق المربع، كذلك سأستفيد كثيرا من ال
    tag
    حيث انني سأتمكن من معرفةأين يقع الحجر وعلى أي مربع في الوقت الحالي عند الضغط عليه ولم أكن أعلم هذه الطريقة سابقاً
    لست متأكدة من أن هذا سينجح لكنني سأحاول
    شكرا على مساعدتك أستاذ @hassan-youssef


  • administrators

    اذا استعنتى بالـ
    x and y

    هتعمل مشكلة لان مكانهم هيختلف من موبايل الى موبايل حسب الـ
    resolution

    راى تعملى click listener
    على الاحجار وعلى المربعات طالما عددهم معرف

    وعند الضغط على حجر معين تاخذى الـ
    id
    الخاص بهذا الحجر وتخذينه فى متغير عام
    ثم عن النقر على مربع معين فى اللوحة
    تقومين بتخزين الـ
    id
    الخاص بالحجر والموجوع فى الذاكرة فى المتغير العام
    فى خاصية الـ
    tag
    الخاصة بالمربع
    وكذلك تقومين بتغير صورة المربع على صورة الحجر

    والله اعلم


  • administrators

    عموما الالعاب لا يتم استخدام الـ
    views
    العادية
    ولكن يتم استخدام
    surfaceview



  • تمام بعد عدة محاولات نجحت اخيرا في تحريك الاحجار وبصورة صحيحة...طبعا شكرا لك استاذ حسن لانني استفدت كثيرا من معرفة خاصية ال
    tag
    و استطعت حل مسألة الوصول المربع الذي يقف عليه الحجر من خلالها لكن استخدام الsurfaceview
    لا اعتقد انه يفيدني بما أن لعبتي لا تحتوي على ايجارات كثيرة حسب ما فهمت هي تفيد الالعاب الي يحصل فيها تغيير للفريمات بسرعه أو هكذا لكن أيضا حبيت وجودها لانها ممكن تفيدني بالمستقبل
    أما حل المشكلة فانني قمت باستخدام getLocationOnScreen
    لكنني قمت برسم المربعات داخل الكود بما انو موقعها سيتغير من شاشه جهاز الى اخر وقمت بنقل الحجر الى نفس الموقع مع تغيير بسيط
    ساقوم بمشاركة الكود حالما اقوم بفتح اللابتوب لمعرفة رايكم وفي حال احتاج اي تعديل


  • administrators

    @salrad

    رائع جدا ومجهود مميز اهنئك عليه



Suggested Topics