Hi !
Featured games (85)
games approved by the League of Dukes
Games in Showcase (616)
Games in Android Showcase (173)
games submitted by our members
Games in WIP (659)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Class initialization and sharing  (Read 1074 times)
0 Members and 1 Guest are viewing this topic.
Offline williamwoles

Senior Newbie

« Posted 2010-05-11 13:32:58 »

Hey guys,

Recently I have found a problem with the way I'm trying to initialize and share a class. I'll explain better the problem I have:

I have two programs:
- AttributeManager(program to create attributes for character, an example of attribute is "Health")
- Game Client

So on AttributeManager I create some attributes like Health, Mana, Energy, etc. There is shared Serializable class, which represents each attribute, let's say:
class Attribute implements Serializable
private String name;
private int intial_value;
public Attribute(){}
// ... Here goes gets and sets

After creating all the "attributes" I store them to Hashtable <String, Attribute> attribute_list and save it to file, since Hashtable is serializable it's no problem opening it in the other application.

In game, I initialize the list when loading game client to the class Data, reading the entry of file stored by AttributeManager
class Data
// I read the content of file to this variable
public static Hashtable <String, Attribute> attribute_list;

private Data(){}

Now where the problem is:
What I'm doing is the following, when I initialize main character(it also has attribute_list variable) i set the list stored in Data.attribute_list, when some other character does login, I also use Data.attribute_list to intialize it's attribute list.. The problem is that attributes become shared - LOGICALLY. So I did found another solution, which is reading from file everytime I instantiate new character, but I think from the performance side it's not the best solution... Is there any other way of doing it, simply by loading once from file?

I was thinking in creating a method copy(), which would iterate hashtabe and copy the values and not the entire class...

Thanks in advance.

Offline Eli Delventhal

JGO Kernel

Medals: 42
Projects: 11
Exp: 10 years

Game Engineer

« Reply #1 - Posted 2010-05-11 13:47:10 »

Yup, you'll need to manually copy everything. In Java, no copies of objects are made automatically like in some other languages. Every object has a clone() method, but that returns a shallow copy of the object for Collection's (a copy of the pointers but not the data). Usually I provide a constrictor that takes that object as its only parameter for making copies, i.e. MyClass copy = new MyClass(otherMyClass) .

See my work:
OTC Software
Offline williamwoles

Senior Newbie

« Reply #2 - Posted 2010-05-11 14:19:22 »

Ok, thanks a lot, going to think the best way of doing this(the idea of constructor seems very nice)

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline princec

« JGO Spiffy Duke »

Medals: 567
Projects: 3
Exp: 16 years

Eh? Who? What? ... Me?

« Reply #3 - Posted 2010-05-11 14:40:33 »

If you're not so bothered about high performance copying, and your class is properly serializable, you can also use Java serialization to make deep copies of objects, which can be very handy.

Cas Smiley

Offline williamwoles

Senior Newbie

« Reply #4 - Posted 2010-05-11 15:06:28 »

I think I know what I'm going to do Tongue
I'm going to read some java documents about serialization of objects..

Offline Dreamcatchermatt

Junior Devvie

« Reply #5 - Posted 2010-05-12 14:50:51 »

Thats interesting to know the Java dows not like copying classes.

In the past for small projects i have created a static class, say 'characterTemplate' that has static character classes and a Load() method that loads them all from some data file (or just manualy instanceated them in-code). THis is basicaly to hold an in-memory cache of all my most commonly used characters/sprites/partical-effects, etc.

Then, whenever i want say a new 'PlasmaBomb_A', i just go to the template class and copy the static PlansmaBomb_A into a new 'projectile' class and off I go.

THis was in C#/XNA however. Are you saying that this would not work in Java? or that i would need to have a clone() or constructor like
classX(classX x)
   this.a = x.a;
   this.b = x.b;
for each of my character type classes?

thats not really a problem or anything doing it that way.
Just wanted some clarification Smiley
Pages: [1]
  ignore  |  Print  
You cannot reply to this message, because it is very, very old.

Coldstream24 (16 views)
2015-09-03 00:41:28

Andrew_3ds (25 views)
2015-09-01 19:08:10

afikri (17 views)
2015-08-31 09:30:22

afikri (24 views)
2015-08-31 09:30:07

afikri (13 views)
2015-08-31 09:27:24

afikri (16 views)
2015-08-31 09:26:40

Roquen (29 views)
2015-08-29 11:30:54

GamerC4 (36 views)
2015-08-22 20:38:50

GamerC4 (33 views)
2015-08-22 20:37:18

GamerC4 (40 views)
2015-08-22 20:37:01
HotSpot Options
by Roquen
2015-08-29 11:33:11

Rendering resources
by Roquen
2015-08-17 12:42:29

Rendering resources
by Roquen
2015-08-17 09:36:56

Rendering resources
by Roquen
2015-08-13 07:40:51

Networking Resources
by Roquen
2015-08-13 07:40:43

List of Learning Resources
by gouessej
2015-07-09 11:29:36

How Do I Expand My Game?
by bashfrog
2015-06-14 11:34:43

List of Learning Resources
by PocketCrafter7
2015-05-31 05:37:30 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!