xaitMap اکنون از Unity پشتیبانی می کند                          نسخه جدید موتور NeoAxis منتشر شد                          پیام نوروزی محمد غضنفری به تمام علاقه مندان به دانش ساخت بازی در سال 91                          معرفی کتاب 1001 video games you must play before you die                          رونمایی از دو کتاب با محوریت تولید ابزارهای ساخت بازی                          مستند بنیاد بازی یا بازی بنیاد                          مستند معرفی اسکنر سه بعدی
 
 
 
بازی ساز تخصصی ترین تارنمای آموزش ساخت بازی دو بعدی سه بعدی و طراحی بازی در ایران: تالار گفتمان

 
بازی ساز تخصصی ترین تارنمای آموزش ساخت و طراحی بازی :: نمايش موضوعات - اتاق کار شماره 07 Torque Game Engine

اتاق کار شماره 07 Torque Game Engine

 

اين انجمن قفل شده است . شما مجاز به ارسال مطلب يا جوابيه و ويرايش مطالب نمي باشيد.   اين مطلب قفل شده است . شما مجاز به ويرايش آن و يا ارسال جوابيه نمي باشيد .    

   بازی ساز تخصصی ترین تارنمای آموزش ساخت و طراحی بازی صفحه اول انجمن -> موتور Torque Game Engine Advanced -> اتاق کارها (Workshops)

نمايش موضوع قبلي :: نمايش موضوع بعدي  
نويسنده پيغام

admin
مدیر سایت
مدیر سایت

وضعيت: آفلاين
9 مهر ماه ، 1387
تعداد ارسالها: 455
امتياز: 0
تشکر کرده: 88
تشکر شده 154 بار در 98 پست

محل سكونت: درون قلب شما

ارسالارسال شده در: جمعه، 6 فروردين ماه ، 1389 04:31:47    موضوع مطلب: اتاق کار شماره 07 Torque Game Engine پاسخ همراه با اعلان

بسم الله الرحمن الرحیم

اتاق کار شماره 07

آسیب دیدن بوسیله اسلحه


در این قسمت می خواهیم یاد بگیریم که چگونه کاربر بر اثر خوردن تیر به آن آسیب ببیند و همجنین تیر با شخصیت مورد نظر تصادم ایجاد کند. همچنین ما در این قسمت بررسی می کنیم که چگونه میزان آسیب دیدگی بر اثر تیر را حساب نماییم.
برای این قسمت شما باید حتماً قسمت های قبلی را بلد باشید به خصوص دو قسمت مربوط به اسلحه و مسیریابها را.
چرا که برای این قسمت شخصیت شما باید دارای یک اسلحه باشد و همچنین یک چرخه مسیریاب را هم ساخته باشید.
اکنون فایل ضمیمه این پست را دانلود کنید.
دو فایل shapeBase.cs و radiusDamage.cs را در پوشه tutorial.base/server رونوشت (Copy) کنید.
اکنون فایل game.cs را در tutorial.base/server باز نموده و این دو خط کد را به تابع onServerCreated() اضافه نمایید.

                           
:كد

exec("./radiusDamage.cs");
exec("./shapeBase.cs");
فایل محتوی پویانمایی با نام player_dieknees.dsq را در آدرس tutorial.base\data\shapes\player رونوشت کنید.
اکنون فایل player.cs را در tutorial.base/server باز کرده و در بلوک اطلاعاتی TSShapeConstructor(PlayerDts) کد زیر را وارد نمایید.
                           
:كد

sequence12 = "~/data/shapes/player/player_dieknees.dsq die";
اکنون این بلوک اطلاعاتی باید به شکل زیر باشد. کد زرد کد اضافه شده به این بلوک می باشد.
                           
:كد

datablock TSShapeConstructor(PlayerDts)
{
   baseShape = "~/data/shapes/player/player.dts";
   sequence0 = "~/data/shapes/player/player_root.dsq root";
   sequence1 = "~/data/shapes/player/player_forward.dsq run";
   sequence2 = "~/data/shapes/player/player_back.dsq back";
   sequence3 = "~/data/shapes/player/player_side.dsq side";
   sequence4 = "~/data/shapes/player/player_fall.dsq fall";
   sequence5 = "~/data/shapes/player/player_land.dsq land";
   sequence6 = "~/data/shapes/player/player_jump.dsq jump";
   sequence7 = "~/data/shapes/player/player_standjump.dsq standjump";
   sequence8 = "~/data/shapes/player/player_lookde.dsq look";
   sequence9 = "~/data/shapes/player/player_head.dsq head";
   sequence10 = "~/data/shapes/player/player_headside.dsq headside";
   sequence11 = "~/data/shapes/player/player_celwave.dsq celwave";
   sequence12 = "~/data/shapes/player/player_dieknees.dsq die";
};
در حقیقت شما با این کار پویانمایی افتادن شخصیت اصلی را برای موتور تعریف کرده اید. به این صورت که اول فایل پویانمایی شده با فرمت DSQ را در موتور گذاشته و سپس در بلوک اطلاعاتی مربوط به پویانمایی های شخصیت این عمل را برای آن تعریف نمودید.
کد زیر را به بلوک اطلاعاتی Player Body اضافه نمایید.
                           
:كد

className = Armor;

اکنون کد باید شبیه زیر باشد.
                           
:كد

datablock PlayerData(Player Body)
{
    className = Armor;

    ...
دادن میزان Armor به متغیر className می تواند تمامی تمام بازیکن ها را به Armor ارث بدهد.
کد زیر را هم در پایین تمامی کدها بگذارید. تا تابع Player::playDeathAnimation تعریف گردد.
                           
:كد

function Player::playDeathAnimation( %this )
{
    %this.setActionThread( "die" );
}
این تابع در هنگامی که بازیکن می خواهد دور از جون شما ! بمیرد فراخوانی می گردد.
اکنون به جاهای سختش رسیدیم. درست در زیر این کد باید کدهای زیر را وارد نمایید اما نترسید برایتان توضیح می دهم که کارش چیست
                           
:كد

function Armor::damage( %this, %obj, %sourceObject, %position,
                              %damage, %damageType )
{
    // If we're already dead, don't bother with it...
    if( %obj.getState() $= "Dead" )
        return;

    %obj.applyDamage( %damage );

    echo( "Damage Type = " @ %damageType );

    // Deal with client callbacks here because we don't have this information
    // in the onDamage or onDisabled methods
    %client = %obj.client;
    %sourceClient = %sourceObject ? %sourceObject.client : 0;

    if( %obj.getState() $= "Dead" )
        %client.onDeath( %sourceObject, %sourceClient, %damageType, %location );
}
این تابع توضیح می دهد که اگر هر شی یا تابعی که احتیاج به اعمال آسیب بر روی این شی را دارد اینجا ما تعیین می کنیم که چقدر آسیب وارد کند.
نکته: این تابع نمی تواند خوب برای شخصیت ها کار کند مگر اینکه از ShapeBase استفاده کنیم. و باید فایلی با نام shapeBase.cs را هم به پوشه server اضافه کرده باشیم. که این فایل همراه با سایر فایلها در ضمیمه این پست آمده است.
خوب به بحث بازگردیم. در زیر کدهای تابع Armor::damage که الان اضافه کردید کدهای زیر را اضافه کنید.
                           
:كد

function Armor::onDisabled( %this, %obj, %state )
{
    // If we want to deal with the damage information that actually caused
    // this death, then we would have to move this code into the script
    // "damage" method.
    %obj.playDeathAnimation();

    // Release the main weapon trigger.
    %obj.setImageTrigger( 0, false );

    // Schedule time and duration of fade-out for dead players.
    %obj.schedule( 6000, "startFade", 1000, 0, true );

    // Schedule deletion for dead players.
    %obj.schedule( 8000, "delete" );
}
این قسمت از کد برای هنگامی است که اشیای ما در حالت غیر فعال هستند. این حالت مربوط به زمانی است که اشیا یا شخصیتهای ما در حالت مرگ هستند و دیگر هیچ جنب و جوشی ندارند.
خوب این آخرین تغییر فایل Player.cs است. اکنون فایل را ذخیره و ببندید.
rocket_launcher.cs را از پوشه server باز نمایید. اکنون باید بلوک اطلاعاتی RocketProjectile را تغییر دهید.
                           
:كد

datablock ProjectileData( RocketProjectile )
{
    ...
    directDamage = 50;
    radiusDamage = 25;
    damageRadius = 1.5;
    ...
تابع RocketProjectile::onCollision را به شکل زیر تغییر دهید:
                           
:كد

function RocketProjectile::onCollision( %this, %obj, %col, %fade, %pos, %normal )
{
    echo("RocketProjectile::onCollision called! ----------------------------");

    // For direct hits... apply damage to all shape base objects
    if( %col.getType() & $TypeMasks::ShapeBaseObjectType )
        %col.damage( %obj, %pos, %this.directDamage, "Rocket" );

    // For radius damage hits... use the radiusDamage utility function defined
    // by the radiusDamage.cs script to see if we our player or bot will take
    // any damage.
    radiusDamage( %obj, VectorAdd(%pos, VectorScale(%normal, 0.01)),
                  %this.damageRadius, %this.radiusDamage, "Radius", 40 );
}
این هم از rocket_launcher.cs اکنون آن را بسته و ذخیره نمایید.
اکنون Torque را اجرا کنید و به شخصیتی که در مسیریاب مشغول دویدن است تیراندازی کنید. در حالی که به شخصیت تیراندازی می کنید بر روی دکمه ~ از روی صفحه کلید کلیک کنید. می بینید که هنگام برخورد تیر به شخصیت این متون در بخش console نمایش داده می شود.
                           
:كد

...
RocketProjectile::onCollision called! ----------------------------
Damage Type = Rocket
RocketProjectile::onCollision called! ----------------------------
radiusDamage called!
Damage Type = Radius
RocketProjectile::onCollision called! ----------------------------
radiusDamage called!
Damage Type = Radius
RocketProjectile::onCollision called! ----------------------------
radiusDamage called!
Damage Type = Radius
...

_________________
هدف ما پیشرفت صنعت بازی های رایانه ای در ایران است.
امام باقر (علیه السلام): دانشمندی که از علمش استفاده شود از هفتاد هزار عابد بهتر است.

بازگشت به بالا

رويت مشخصات كاربر ارسال پيغام شخصي بازديد از سايت ارسال كننده مطلب شناسه Yahoo
تمامي مطالب ارسال شده:   
اين انجمن قفل شده است . شما مجاز به ارسال مطلب يا جوابيه و ويرايش مطالب نمي باشيد.    اين مطلب قفل شده است . شما مجاز به ويرايش آن و يا ارسال جوابيه نمي باشيد .   

   بازی ساز تخصصی ترین تارنمای آموزش ساخت و طراحی بازی صفحه اول انجمن -> موتور Torque Game Engine Advanced -> اتاق کارها (Workshops)

زمان پيشفرض سايت: ساعت گرينويچ + 3.5 ساعت
صفحه 1 از 1
  

پاسخ سريع در دسترس نميباشد

  


 


Powered by phpBB © 2001, 2008 phpBB Group
تبلیغات شما در اینجا


Powered By PHPNuke All Right Reserved bazisaz Team