Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (109)
games submitted by our members
Games in WIP (536)
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 807 times)
0 Members and 1 Guest are viewing this topic.
Offline williamwoles

Senior Newbie





« Posted 2010-05-11 15: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:
1  
2  
3  
4  
5  
6  
7  
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
1  
2  
3  
4  
5  
6  
7  
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 15: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 16: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 Kernel


Medals: 343
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #3 - Posted 2010-05-11 16: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 17: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 Member





« Reply #5 - Posted 2010-05-12 16: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
1  
2  
3  
4  
5  
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.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

CogWheelz (18 views)
2014-07-30 21:08:39

Riven (25 views)
2014-07-29 18:09:19

Riven (15 views)
2014-07-29 18:08:52

Dwinin (13 views)
2014-07-29 10:59:34

E.R. Fleming (33 views)
2014-07-29 03:07:13

E.R. Fleming (12 views)
2014-07-29 03:06:25

pw (43 views)
2014-07-24 01:59:36

Riven (43 views)
2014-07-23 21:16:32

Riven (30 views)
2014-07-23 21:07:15

Riven (31 views)
2014-07-23 20:56:16
List of Learning Resources
by SilverTiger
2014-07-31 18:29:50

List of Learning Resources
by SilverTiger
2014-07-31 18:26:06

List of Learning Resources
by SilverTiger
2014-07-31 13:54:12

HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54
java-gaming.org 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‑gaming.org
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!