منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "Games";
الأرشيف الحالي: 2004.12.12;
تنزيل: [xml.tar.bz2];

إلى

ليس الكثير عن العفريت ، قل لي. البحث عن فروع مماثلة


MonoLife   (2004-08-08 06:56) [0]

مرحبا لجميع المهنيين وعشاق دلفي!
اشتريت ، تقريبًا مقابل آخر نقود ، بطاقة إنترنت.
وبالطبع ، أولاً وقبل كل شيء - إلى المنتدى.
إنه لمن دواعي السرور أن نرى أن المنتدى هو أكثر حيوية من جميع الأحياء. اذا حكمنا من خلال القضايا
المنصوص عليها في المنتدى ، سواء الايجابيات و
القادمون الجدد لتطوير التطبيقات والألعاب والبرامج الأخرى. في بيئة دلفي.
وأيضاً ، من الجيد ألا يجيب الحرفيون على الأسئلة
القادمون الجدد و "ليسوا ماهرين" بإجابة واحدة: "لديك مشاكل مع
الحمض النووي "... والأسباب ، للوهلة الأولى ،" أسئلة غبية "- عدم وجود
المعلومات (في المدينة التي نعيش فيها "نحن" ، لا يوجد أدب ضروري ، الإنترنت
احتكار ومكلفة للجحيم ، والوقت هو المال على الانترنت
الهرب بسرعة الصوت) ، حسنا ، في شكل مهملة تماما
حالات الحمض النووي أيضا. حتى الآن ، قبل الكتابة إلى المنتدى ،
لتوفير المال ، يجب أن أكتب هذا النص في الملاحظة أولاً ...
سامحني على الوقت الذي استغرقه الضيوف ومضيفو المنتدى.
أرغب في الحصول على وقت للمحاولة في دلفي ، إن لم يكن كل شيء ، ثم كثيرًا.
والآن ، أحاول اختلاق شيء يشبه 2 ذي الأبعاد
لعبة باستخدام DelphiX. سامحني أتباع نقي
DirectX و API.
آسف ، تأخر المقدمة. تصحيح لي إذا كنت مخطئا. Podcherpyvaya
بما في المعلومات. من المنتدى:
أنا أفهم عمل Sprite (s) و SpriteEngine - هذا يتم عرضه على الشاشة
صورة معينة. وهذا هو ، العفريت ليس كائن في نموذج مثل ،
على سبيل المثال ، زر (TButton) أو لوحة (TPanel) ، ولكن تتبع فقط
الصورة؟ لذلك ، Sprite ليس لديها إجراءاتها الخاصة ، مثل MouseDown ،
MouseMove الخ نعم ، ليسوا في DXSprite.pas. DXDraw لديه منهم ...
كل هذا يحدث عند مقارنة صورة Rect وموضع مؤشر الماوس مع
باستخدام بعض الوظائف أو التحقق من BrowsRect of Sprite نفسه.
ولكن في برنامجي المستقبلي يتم إنشاء مجموعة من TImageSprite (s) ،
على سبيل المثال ، من عناصر 50 ، وبعد الرسم ، يتم ترتيب Sprites عشوائي (أوم)
على السطح ومع تنسيق Z ، على سبيل المثال ، من -2 إلى 2. هنا و
واجهت مشكلة ، وكيفية "ربط" العفريت العلوي مع الماوس؟
بعد كل شيء ، جميع العفاريت السفلى أيضا "تقرير" عن المباراة
المستقيم مع مؤشر الماوس. وعند التحقق من الصفيف عند النقر فوق الماوس ، على سبيل المثال ،
من 0 إلى 49 ، وليس العفريت العلوي (مع الحد الأقصى للتنسيق Z) "السنانير" ،
والأول (الأخير ، إذا كان في الأسفل) في قائمة الصفيف. أنا أحاول حل هذا
مشكلة لعدة أيام ، ولكن فقط حصلت على مزيد من الخلط وكسرت ما بدأ.
على ما يبدو ، ليس لدي ما يكفي من المعرفة ، والأسوأ من ذلك كله -
منطق لحل المشكلة. لماذا أنتقل إلى المنتدى.
هل هناك حل في هذه الحالة؟ أو سيتعين عليك "كتابة" مكوناتك الخاصة ، والتي أخشى أنها ليست خبيرة.
شكرا لك على سعة صدرك في قراءة هذا التأليف.



MonoLife   (2004-08-08 12:30) [1]

ملاحظة: إذا لم يكن هناك إجابة لسؤالي ،
أو "شرح طويل" ، ثم أخبرني على الأقل بعد ذلك ،
هل من الممكن التخلص تماما من وميض
TImage عند التحرك حول النموذج؟

شكرا.



Kruel   (2004-08-08 14:19) [2]

وما هو معقد جدا. انتقل من خلال جميع العفاريت في الحلقة ، وسيكون الشخص الذي يحمل Z أكثر (وسقط الماوس فيه) هو الأعلى.
نسيان نقل TImage. هذا المكون ليس لهذا الغرض. رسم على الأشكال قماش.



MonoLife   (2004-08-08 15:46) [3]

<انتقل من خلال جميع العفاريت في الحلقة ، وسيكون الشخص مع Z أكثر (وسقط الماوس فيه) أعلى واحد .. >>

حاولت أن أفعل ذلك ، لكن من الواضح أن المنطق ليس صحيحًا تمامًا. الخلط. علاوة على ذلك ، في بعض الأحيان يتزامن تنسيق Z



aprm   (2004-08-08 17:39) [4]


> ملاحظة: إذا لم يكن هناك إجابة لسؤالي ،
> أو "شرح طويل" ، ثم أخبرني على الأقل ،
> هل من الممكن التخلص تماما من وميض
> TImage ، عندما يتحرك حول النموذج؟


في الواقع ، لا يفعلون ذلك ، ولكن إذا كنت تريد ذلك حقًا ، فيمكنك تعيين وقت في Tpanel ، وتعيين TPanel.fullrepaint: = false؛ واسحب بالفعل من قبل لوحة. لن وميض



Servelat ©   (2004-08-08 21:56) [5]

أولاً ، إذا كان العفريت لا يحتوي على أجزاء شفافة (أي ، الصورة لها شفاف = خطأ) ، فهذا ليس مقابل أي شيء: DXSpriteEngine.Engine.GetSpriteAt (X ، Y) ، سيعيد العفريت المطلوب إليك ، ويفعل ما تريده به.
عندما تكون هناك مناطق شفافة ، يكون الأمر أكثر صعوبة ، فأنا أعمق في الحفر (لم أفعل ذلك :)) وكتبت مثالًا ، يتم أخذ المساحات الشفافة في الاعتبار هناك. صحيح ، أنا لم أفكر في الخيار عندما يكون Z هو نفسه ، إذا كنت تريد البحث - أعمق ، فأنا متأكد من أنه يمكنك القيام بذلك. لكنني مسبب مثل هذا: Z يمكن أن تأخذ القيم من
-2147483648 إلى 2147483647.
وفقًا لذلك ، مع عدد العفاريت التي قمت بتسميتها في 50 ، فإن المشكلة تكمن في أن كل العفاريت لها حرف Z الخاص بها ، لا يوجد شيء.
لذلك لا تقلق واجعل Z ليس من -2 إلى 2 ، ولكن من -20000 إلى 20000 ، ولا توجد أي فرصة عملياً للتطابق مع Z.
نعم ، خذ مثالي منى هنا:
http://pavel-k.fromru.com/Sample.zip
تلميح: هناك يمكنك سحب العفاريت باستخدام زر الماوس الأيسر (هذه هي النقطة بأكملها في المثال).



MonoLife   (2004-08-09 03:04) [6]

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



MonoLife   (2004-08-09 04:09) [7]

Servelat >>>
شكرا ، نظرت وجربت لك
الكود بسيط ولذيذ! اتضح أن يكون أسهل مما كنت اعتقد.
"فحص الفقاعة" هو ما لم أستطع فعله.
أظن أن هذه هي أبسط خطوة مطلوبة
تعرف بداية المبرمج. حسنا ، وبطبيعة الحال ، لمزيد من مبعثر في Z ،
كان علي أن أفعل هذا أولاً.
ومع ذلك ، عند التحقق من تشغيل البرنامج ، من
تم تنزيل 6 (51 sprite) من 2 sprites 2 مرة من 6 ، تزامن
Z-الإحداثيات. يمكنك إضافة مبعثر ، لكنني أعتقد أنه ليس كذلك
إلى حد كبير ، انتشار ، فإنه لا يزال كبير.



Megabyte-CeerCop ©   (2004-08-09 06:30) [8]

تعيين إحداثيات فقط على عشوائي. و Z بالترتيب من 0 إلى 50. صدقوني ، سيكون هذا كافياً حتى لا تبدو المجموعات متكررة. بعد ذلك ، عند التحقق من العفاريت من النهاية (من 50 إلى 0) ، ستتعثر بالتأكيد على القمة الأولى أولاً.
ويمكنك عمومًا تعيين كل Z: = 0؛ التأثير سيكون هو نفسه.



MonoLife   (2004-08-09 08:31) [9]

>> التأثير سيكون هو نفسه >> [8]
هذا ، ولكن ليس هو نفسه. مشاهدة لأي غرض. والسبب في ذلك هو أنه عند إنشاء نقوش متحركة ، على سبيل المثال ، من 0 إلى 50 ، فإن العفريت "الأكبر"
سوف تتداخل أصغر واحد. وفي كومة مختلف العفاريت لهم
يمكنك بهدوء "معرفة". ما الذي تحصل عليه؟ على سبيل المثال ، لإنشاء
pazzle. لكن شكرا على أي حال.



MonoLife   (2004-08-09 08:32) [10]

>>>
باستخدام العفاريت غير شفافة و
وظيفة DXSprite.Engine.GetSpriteAt (X ، Y) ،
شكرا Servelat (ذ) ، لدي هذا:
// * - * - * - * - * - * - * - * - * - * - * - dpr:
برنامج MovSprite

{شكرًا لك على المساعدة SERVELAT}

يستخدم
أشكال،
SPMovi في "SPMovi.pas" {Form1}؛

{$ R * .res}

بدأ
Application.Initialize.
Application.CreateForm (TForm1 ، Form1) ؛
Application.Run.
نهاية.

// * - * - * - * - * - * - * - * - * - pas:
وحدة SPMovi ؛

واجهة

يستخدم
Windows ، الرسائل ، SysUtils ، المتغيرات ، الفصول ، الرسومات ، عناصر التحكم ، النماذج ،
حوارات ، DXSprite ، DXDraws ، DXClass ؛
نوع
TMyPict = فئة (TImageSprite)
ثور: مزدوج.
أوه: مزدوج ؛
أوقية: عدد صحيح
Lindex: Shortint.
الغاية؛

نوع
TForm1 = فئة (TForm)
DXDraw: TDXDraw؛
ILfr: TDXImageList؛
SEngi: TDXSpriteEngine.
DXTimer1: TDXTimer؛
إجراء FormCreate (المرسل: TObject) ؛
الداخلي DXTimer1Timer (المرسل: TObject ؛ LagCount: Integer) ؛
الداخلي DXDrawMouseDown (المرسل: TObject ؛ الزر: TMouseButton؛
التحول: TShiftState. س ، ص: عدد صحيح) ؛
الداخلي DXDrawMouseUp (المرسل: TObject ؛ الزر: TMouseButton؛
التحول: TShiftState. س ، ص: عدد صحيح) ؛
الداخلي DXDrawMouseMove (المرسل: TObject ؛ Shift: TShiftState ؛ X ،
Y: عدد صحيح) ؛
خاص
{الإعلانات الخاصة}
nw، nH: Shortint؛
جمهور
{الإعلانات العامة}

ينتهي.

فار
Form1: TForm1؛
md: منطقية؛
SpCount: Shortint؛
LindZ: عدد صحيح
MoviSpr: TImageSprite؛

التنفيذ
{$ R * .dfm}

الإجراء TForm1.FormCreate (المرسل: TObject) ؛
var i: integer؛
بدأ
DXDraw.Align: = alClient؛
md: = false؛
SpCount: = 49؛
LindZ: = 0؛
بطريقة عشوائية.
SEngi.Engine.X: = 0؛
SEngi.Engine.Y: = 0؛
بالنسبة إلى i: = 0 to SpCount-1 do
مع TMyPict.Create (SEngi.Engine) القيام به
بدأ
الصورة: = ILfr.Items.Find ("nam") ؛
Image.Transparent: = False؛
العرض: = Image.Width؛
الارتفاع: = Image.Height ؛
X: = عشوائي (DXDraw.Width-Width) ؛
Y: = عشوائي (DXDraw.Height-Height) ؛
Z: = عشوائي (500) -25 ؛
OZ: = Z ؛
ليندكس: = أنا ؛
ينتهي.
nW: = SEngi.Engine.Items [0] .Width div 2؛
nH: = SEngi.Engine.Items [0] .Height div 2؛
MoviSpr: = لا شيء ؛
الغاية؛

الإجراء TForm1.DXTimer1Timer (المرسل: TObject ؛ LagCount: Integer)؛
بدأ
إن لم يكن DXDraw.CanDraw ثم الخروج ؛
DXDraw.Surface.Fill (0) ؛
SEngi.Move (0) ؛
SEngi.Draw.
مع DXDraw.Surface.Canvas القيام به
بدأ
إذا MD ثم
بدأ
TextOut (1,20 ، IntToStr (LindZ)) ؛
TextOut (1,1، IntToStr ((MoviSpr as TMyPict) .Lindex))؛
ينتهي.
الإفراج.
ينتهي.
DXDraw.Flip.
الغاية؛

الداخلي TForm1.DXDrawMouseDown (المرسل: TObject ؛ زر: TMouseButton؛
التحول: TShiftState. س ، ص: عدد صحيح) ؛
فار
i: عدد صحيح
P: TPoint ؛
بدأ
إذا زر <> mbLeft ثم الخروج ؛
p: = نقطة (X ، Y) ؛
بالنسبة إلى i: = 0 to SpCount-1 do
بدأ
إذا PtInRect (SEngi.Engine.Items [i] .BoundsRect، P) ثم
بدأ
md: = صحيح ؛
MoviSpr: = (SEngi.Engine.GetSpriteAt (X، Y) كـ TMyPict)؛
LindZ: = (MoviSpr as TMyPict) .OZ؛
(MoviSpr كـ TMyPict) .Z: = 600؛
استراحة
ينتهي.
Application.ProcessMessages.
ينتهي.
الغاية؛

الإجراء TForm1.DXDrawMouseUp (المرسل: TObject ؛ الزر: TMouseButton؛
التحول: TShiftState. س ، ص: عدد صحيح) ؛
بدأ
إذا MD ثم
بدأ
md: = false؛
(MoviSpr كـ TMyPict) .Z: = (MoviSpr as TMyPict) .OZ؛
MoviSpr: = لا شيء ؛
ينتهي.
الغاية؛

الداخلي TForm1.DXDrawMouseMove (المرسل: TObject ؛ Shift: TShiftState ؛ X ،
Y: عدد صحيح) ؛
بدأ
إذا MoviSpr = لا شيء ، ثم الخروج ؛
MoviSpr.X: = X-nW؛
MoviSpr.Y: = Y-nH؛
الغاية؛

نهاية.

ربما لا يمكنك النشر في النموذج في المنتدى؟
رسالة كبيرة جدا؟



ASoft   (2004-08-09 09:12) [11]

>> بفضل Servelat (y) [10] >>

انضم الآن!
كانت هناك مشكلة ...



صفحات: 1 فرع كامل

المنتدى: "Games";
الأرشيف الحالي: 2004.12.12;
تنزيل: [xml.tar.bz2];

الطابق العلوي









الذاكرة: 0.62 ميغابايت
الوقت: 0.058 ج
3-1100348476
Jiurasd
2004-11-13 15:21
2004.12.12
لا أستطيع تغيير جدول قاعدة البيانات


1-1101370809
عدو سريع
2004-11-25 11:20
2004.12.12
أسلوب XP


14-1101037120
عضو جديد
2004-11-21 14:38
2004.12.12
يضحك الماجستير :-)


14-1100769647
IMHO
2004-11-18 12:20
2004.12.12
تجربة حياة مريرة ...


1-1101652454
جوكوف
2004-11-28 17:34
2004.12.12
المعلمات في النص





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch أنجليزي الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский