Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2019, 14:24   #1
diomed16
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 37
По умолчанию Обращение к методам класса

Вот допустим, у меня есть класс, в его методе создаётся объект другого класса, например, Х. Создаю объекты класса, Y. И вот в одной функции мне нужно через event определить с каким объектом Y столкнулся другой объект, Z. Он определяет, что столкнулся с объектом Х и я не могу получить доступ к свойствам и методам класса. Как это сделать?

Код:
--класс
Asteroid= {}
--тело класса
function Asteroid:new(name)
 -- свойства
    local private = {}
        --приватное свойство
        private.hp = 4
		private.img = ""
		private.asteroidsTable = {}

		
   
    local public= {}
	--публичное свойство
        public.name = name or "asteroid"
        

	--публичные методы
		function public:create()
		local newAsteroid = display.newSprite( mainGroup, objectSheet,sequenceData, 85, 112 )
		physics.addBody( newAsteroid, "dynamic", { radius=40, bounce=0.3 } )		

		end
		
		
    function public:getName()
        return self.name 
    end
	
	function public:setHP()
	private.hp = private.hp - 1
	end
	
	function public:getHP()
	return private.hp
	end


---------------------------------------------------------------------------
vasya = Asteroid:new("asteroid")  -- Создание объекта класса

local function onCollision( event )  -- Обработка столкновения снарядов с врагами и игроком

 local x
  local y
    if ( event.phase == "began" ) then
 
        local obj1 = event.object1
        local obj2 = event.object2
		if ( ( obj1.myName == "laser" and obj2.name == "asteroid" ) or
             ( obj1.myName == "asteroid" and obj2.myName == "laser" ) )
        then
x=obj1.x
y=obj1.y

		audio.play( explosionSound2 )
		display.remove( obj1 )
		if obj2:getHP()==4 then
		obj2:setSequence("damage1")
		end
		if obj2:getHP()==3 then
		obj2:setSequence("damage2")
		end
		if obj2:getHP()==2 then
		obj2:setSequence("damage3")
		end
Пожалуйста, оформляйте Ваш код согласно правилам.

Получается, функция видит только объект
local newAsteroid = display.newSprite( mainGroup, objectSheet,sequenceData, 85, 112 )
, но не объект класса. Надеюсь, что-то понятно из моего кривого изложения.

Последний раз редактировалось Вадим Мошев; 17.02.2019 в 15:44.
diomed16 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ - Как получить доступ к методам класса, который содержится в векторе класса Disabled7 Общие вопросы C/C++ 1 14.06.2015 10:19
Обращение к методам класса без созданияобъекта CeHTuJI Общие вопросы Delphi 8 27.09.2013 22:38
С++ Builder обращение к методу класса из другого класса Astat Помощь студентам 2 20.01.2013 17:59
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18
C# доступ к методам класса. Lime Общие вопросы .NET 4 03.03.2009 20:51